printЗадачи заочного тура личного первенства 2009

printA. Часы

Ограничения: время – 1s/2s, память – 64MiB Ввод: input.txt или стандартный ввод Вывод: output.txt или стандартный вывод copy
Послать решение Blockly Посылки Темы Где Обсудить (1)

Пекарь Антонио Панеттони считает, что для получения рождественского пирога идеальной симметричной формы его нужно вынимать из духовки в тот момент, когда часы показывают "палиндромное" время, которое читается одинаково слева-направо и справа-налево.
Напишите программу, которая определяет по времени установки пирога в духовку время, когда на часах будет подходящее время для его извлечения.
Первая строка ввода содержит одно целое число `N` (`1\ ≤\ N\ ≤\ 100`) – количество вариантов для времени установки пирога в духовку. Далее следует `N` строк, содержащих время в формате `"HH"`:`"MM"` (`00\ ≤\ "HH"\ ≤23`, `00\ ≤\ "MM"\ ≤\ 59`).
Для каждого заданного времени вывести ближайшее "палиндромное" время, не совпадающее с заданным, в формате `"HH"`:`"MM"`.

Пример ввода

3
00:00
12:34
23:59

Пример вывода

01:10
13:31
00:00

printB. Сортировка

Ограничения: время – 1s/2s, память – 64MiB Ввод: input.txt или стандартный ввод Вывод: output.txt или стандартный вывод copy
Послать решение Blockly Посылки Темы Где Обсудить (0)

Начинающий программист Дон Тунк хочет определить количество операций обмена и количество проходов в известном алгоритме при сортировке некоторой последовательности целых чисел.
Для этого он написал следующую программу на языке Паскаль:
program BubbleSort;
var
  Arr:Array[1..100000] of Integer;
  n, i, Temp, Count, NLoop : Integer; 
  Flag : Boolean; 
begin
  read(n);
  for i:=1 to n do
    read(Arr[i]);
  Count := 0;
  NLoop := 0;
  repeat
    Flag := False;
    for i := 1 to n - 1 do
      if Arr [i] > Arr [i + 1] then
      begin 
        Temp := Arr [i]; 
        Arr [i] := Arr [i + 1];
        Arr [i + 1] := Temp; 
        Flag := True;
        inc(Count);
      end;
    inc(NLoop);
  until not Flag;
  writeln(Count,' ',NLoop);
end;
Есть перевод этой программы на язык Си:
#include <stdio.h>
int Arr[100000];
int n, i, Temp, Count=0, NLoop=0, Flag;
int main()
{ scanf("%d",&n);
  for(i=0; i<n; ++i)
    scanf("%d",&Arr[i]);
  do
  { Flag=0;
    for(i=0; i<n-1; ++i)
      if(Arr[i]>Arr[i+1])
      { Temp=Arr[i];
        Arr[i]=Arr[i+1];
        Arr[i+1]=Temp;
        Flag=1;
        ++Count;
      }
    ++NLoop;
  } while(Flag);
  printf("%d %dn",Count,NLoop);
  return 0;
}
К сожалению, время работы этой программы оказалось очень большим, поэтому Дон обратился за помощью к вам, чтобы вовремя завершить свое исследование.
Напишите программу, определяющую для заданной последовательности количество обменов и количество проходов, необходимых для её сортировки вышеуказанным алгоритмом.
Первая строка ввода содержит одно целое число `N` (`2\ ≤\ N\ ≤\ 10^5`) – количество элементов в последовательности. Вторая строка ввода содержит `N` целых чисел в диапазоне от `1` до `10^5` – сортируемую последовательность.
Вывести два целых числа – количество обменов и количество проходов, выполненных при сортировке заданной последовательности указанным алгоритмом.

Пример ввода

4
10 1 2 1

Пример вывода

4 3

printC. Марки

Ограничения: время – 1s/2s, память – 64MiB Ввод: input.txt или стандартный ввод Вывод: output.txt или стандартный вывод copy
Послать решение Blockly Посылки Темы Где Обсудить (0)

Почтовое ведомство выпустило серию марок различного номинала для оплаты пересылки корреспонденции. Так как места для наклейки марок на конверте или бандероли немного, необходимо подготовить рекомендации для сотрудников почты о количестве наклеиваемых марок в зависимости от стоимости пересылки в форме таблицы:
Стоимость пересылкиКоличество марок
от 1 до `P_1`не более 1
от `P_1+1` до `P_2`не более 2
от `P_2+1` до `P_3`не более 3
от `P_9+1` до `P_10`не более 10
Для экономии марок необходимо вычислить максимально возможные значения `P_i` для всех `i` от 1 до 10.
Первая строка ввода содержит одно целое число `N` (`1\ ≤\ N\ ≤\ 100`) – количество различных номиналов. Вторая строка содержит `N` различных целых чисел в диапазоне от 1 до 1000 – номиналы марок. Первое число из них всегда равно 1.
Вывести в первой строке 10 целых чисел – максимально возможные значения `P_i`.

Пример ввода

3
1 2 5

Пример вывода

2 7 12 17 22 27 32 37 42 47
loading