Олимпиада ОмГТУ по программированию – 2010

A. Оттепель

Лимит времени 1000/2000/2000/2000 мс. Лимит памяти 65000/65000/65000/65000 Кб.

Уставшие от необычно теплой зимы, жители решили узнать, действительно ли это самая длинная оттепель за всю историю наблюдений за погодой. Они обратились к синоптикам, а те, в свою очередь, занялись исследованиями статистики за прошлые годы. Их интересует, сколько дней длилась самая длинная оттепель. Оттепелью они называют период, в который среднесуточная температура ежедневно превышала 0 градусов Цельсия. Напишите программу, помогающую синоптикам в работе.

Входные данные: В первой строке дано число N – общее количество рассматриваемых дней:1 <= N <= 100. В следующей строке через пробел располагается N целых чисел, разделенных пробелами. Каждое число – среднесуточная температура в соответствующий день. Температуры – целые числа и лежат в диапазоне от –50 до 50.

Выходные данные M Выведите длину самой продолжительной оттепели

Пример:

Ввод Вывод
6
-20 30 -40 50 10 -10
2
8
10 20 30 1 -10 1 2 3
4
5
-10 0 -10 0 -10
0

B. Сдвиг текста

Лимит времени 1000/2000/2000/2000 мс. Лимит памяти 65000/65000/65000/65000 Кб.

Мальчик Кирилл написал однажды на листе бумаги строчку, состоящую из больших и маленьких латинских букв, а после этого ушел играть в футбол. Когда он вернулся, то обнаружил, что его друг Дима написал под его строкой еще одну строчку такой же длины. Дима утверждает, что свою строчку он получил циклическим сдвигом строки Кирилла вправо на несколько шагов (циклический сдвиг строки abcde на 2 позиции вправо даст строку deabc). Однако Дима известен тем, что может случайно ошибиться в большом количестве вычислений, поэтому Кирилл в растерянности - верить ли Диме? Помогите ему!

Входные данные:Первые две строки содержат строки Кирилла и Димы соответственно. Строки состоят только из латинских символов. Длины строк одинаковы, не превышают 10000 и не равны 0.

Выходные данные: Выведите минимально возможный размер сдвига или -1, если Дима ошибся.

Пример:

Ввод Вывод
abcde
deabc
2

C. 2^N

Лимит времени 1000/2000/2000/2000 мс. Лимит памяти 65000/65000/65000/65000 Кб.

Необходимо вычислить значение 2^n.

Входные: В единственной строке записано натуральное число n: 0 < n < 1000.

Выходные данные: Выведите значение 2^n.

Пример:

Ввод Вывод
3
8
10
1024
72
4722366482869645213696

D. Разрезание квадрата

Лимит времени 1000/2000/2000/2000 мс. Лимит памяти 65000/65000/65000/65000 Кб.

Вася после того, как сделает все уроки, развлекается следующей головоломкой. Он берёт белый клетчатый лист размером N * N клеток, выбирает из него некоторое непустое связное подмножество клеток и красит это подмножество в чёрный цвет. После того, как Вася вырезает из листа чёрный кусок, остаётся ровно один белый кусок. Затем Вася совмещает куски в первоначальный квадрат и кладёт на бесконечный плоский стол. Задача Васи — разделить куски, то есть удалить один из кусков на большое расстояние от другого, не отрывая ни один из кусков от поверхности стола. Например, на рисунке заданы квадраты 5 ? 5. В первом случае куски можно разделить, во втором — нельзя.

Однажды к Васе в гости пришел Петя. Увидев, чем занимается Вася, Петя решил помочь лучшему другу и написать программу, которая определяет, можно ли разделить белую и чёрную части.

Входные данные: В первой строке записано целое число N (3 <= N <= 1000). В следующих N строках по N символов в каждой приведена раскраска листа. Символы 0 обозначают белую часть, а 1 — чёрную. Гарантируется, что оба куска связны по сторонам (например, два квадрата с общей вершиной, но без общей стороны, не считаются связным куском).

Выходные данные: Выведите «Yes», если части можно разделить, и «No» в противном случае.

Ввод Вывод
5
10001
10001
10001
11111
11111
Yes
5
11011
11011
10001
11111
11111
No

E. Скачки

Лимит времени 1000/2000/2000/2000 мс. Лимит памяти 65000/65000/65000/65000 Кб.

Иван Иванович любит ходить на скачки, надеясь на них заработать кругленькую сумму. Ему приглянулась лошадь с номером K, и он решил проверить, сможет ли она выиграть у всех остальных лошадей. Иван Иванович раздобыл информацию, в которой для некоторых пар лошадей сообщается, какая из этих лошадей быстрее. Также он узнал, что у всех лошадей разные скорости.

Требуется написать программу, которая поможет Ивану Ивановичу точно определить может ли выиграть выбранная им лошадь.

Входные данные: в первой строке содержится два целых числа N: 1 <= N <= 100 и K: 1 <= K <= N, где N – количество лошадей, принимающих участие в скачках, K – номер лошади, на которую хочет сделать ставку Иван Иванович. Следующие строки содержат по два числа X и Y: 1 <= X, Y <= N, обозначающие, что лошадь с номером X быстрее лошади с номером Y. Пары X и Y не повторяются. Набор данных завершается строкой, содержащей единственный ноль. Эту строку обрабатывать не надо. Гарантируется, что информация, раздобытая Иваном Ивановичем, корректна.

Выходные данные: Выведите слово «Yes», если Иван Иванович уверен в своем выигрыше и «No» в противном случае.

Пример:

Ввод Вывод
3 1
1 2
1 3
0
Yes
3 2
2 3
0
No
4 2
3 1
2 3
0
No

F. Криптография

Лимит времени 1000/2000/2000/2000 мс. Лимит памяти 65000/65000/65000/65000 Кб.

При подготовке данного комплекта задач жюри столкнулось со следующей проблемой: нужно было передавать по электронной почте тексты задач. Как известно, электронная почта ненадёжна, сообщения передаются открытым текстом, и существует опасность, что кто-нибудь их перехватит. Членам программного комитета вовсе не хотелось, чтобы задачи стали известны участникам раньше начала соревнования, поэтому они прибегли к методам криптографии. Жюри разработало совершенно новый способ шифрования текста, но он пока не запатентован и поэтому держится в секрете. Впрочем, одну тайну мы вам всё же откроем, новый алгоритм основан на работе с простыми числами и, в частности, использует вычисление n-го по счёту простого числа.

Несколько членов программного комитета, независимо друг от друга, разработали программы, производящие такие вычисления, но эти программы выдают разные ответы. Каждый уверен, что он написал свою программу правильно, поэтому жюри встало в тупик и не может продолжать свою работу.

Вы должны помочь жюри и спасти соревнования. Напишите программу, вычисляющую n-ое по счёту простое число, и, самое главное, она должна работать правильно!

Входные данные: В первой строке находится ровно одно натуральное число k: 1<=k<=5000, задающее количество чисел в списке. За ним следуют k натуральных чисел, по одному в строке, каждое из которых не превосходит 5000.

Выходные данные: Для каждого числа n из списка вы должны вывести n-ое по счёту простое число. Ответ для каждого числа должен находиться в отдельной строке.

Пример:

Ввод Вывод
4
3
2
5
7
5
3
11
17