:: Данные вводятся с клавиатуры или из файла input.txt, выводятся на экран или в файл output.txt.
Первые тесты не всегда совпадают с примерами из условия. ::
Задача A. Хеширование
Ограничение по времени, сек
8
Ограничение по памяти, мегабайт
64
Язык Free Pascal
GNU C
GNU C++
Delphi Java Python 2.7
Haskell
Min время, сек
0.42 0.344 0.327 0.521 3.784 1.096 3.176
Среднее время, сек
1.968 1.932 2.717 3.082 4.322 12.258 3.176
Верных решений
50 16 300 110 2 6 1
Реализуйте структуру данных типа “множество строк”. Хранимые строки –
непустые последовательности длиной не более 10 символов, состоящие из
строчных латинских букв. Структура данных должна поддерживать операции
добавления строки в множество и проверки принадлежности данной строки
множеству. Максимальное количество элементов в хранимом множестве не
превосходит 106.
Входные данные
Каждая строка входных данных задает одну операцию над множеством. Запись
операции состоит из типа операции и следующей за ним через пробел строки, над
которой проводится операция. Тип операции – один из двух
символов: + означает добавление данной строки в множество; ? означает
проверку принадлежности данной строки множеству. Общее количество операций
во входном файле не превосходит 106. Список операций завершается строкой, в
которой записан один символ # – признак конца входных данных. При добавлении
элемента в множество НЕ ГАРАНТИРУЕТСЯ, что он отсутствует в этом множестве.
Выходные данные
Программа должна вывести для каждой операции типа ? одну из двух
строк YES или NO, в зависимости от того, встречается ли данное слово в нашем
множестве.
Примеры
входные данные
+ hello
? hello
? bye
+ bye
? bye
#
выходные данные
YES
NO
YES
Задача B. Хеширование с удалением
Ограничение по времени, сек
5
Ограничение по памяти, мегабайт
256
Язык Free Pascal
GNU C
GNU C++
Delphi Java Python 2.7
Mono C#
Python 3.1
Min время, сек
0.546 0.736 0.383 0.524 4.312 2.914 2.356 6.119
Среднее время, сек
3.074 1.896 3.284 2.285 4.699 5.263 3.418 6.147
Верных решений
23 10 398 57 3 4 2 2
Реализуйте структуру данных типа “множество строк”. Хранимые строки –
непустые последовательности длиной не более 10 символов, состоящие из
строчных латинских букв. Структура данных должна поддерживать операции
добавления строки в множество, удаления строки из множества и проверки
принадлежности данной строки множеству. Максимальное количество элементов в
хранимом множестве не превосходит 106.
Входные данные
Каждая строка входных данных задает одну операцию над множеством. Запись
операции состоит из типа операции и следующей за ним через пробел строки, над
которой проводится операция. Тип операции – один из трех
символов: + означает добавление данной строки в
множество; - означает удаление строки из множества; ? означает проверку
принадлежности данной строки множеству. Общее количество операций во
входном файле не превосходит 106. Список операций завершается строкой, в
которой записан один символ # – признак конца входных данных. При добавлении
элемента в множество НЕ ГАРАНТИРУЕТСЯ, что он отсутствует в этом множестве.
При удалении элемента из множества НЕ ГАРАНТИРУЕТСЯ, что он присутствует в
этом множестве.
Выходные данные
Программа должна вывести для каждой операции типа ? одну из двух
строк YES или NO, в зависимости от того, встречается ли данное слово в нашем
множестве.
Примеры
входные данные
+ hello
+ bye
? bye
- bye
? bye
? hello
#
выходные данные
YES
NO
YES
Задача C. Остаток от деления на цифру
Язык Free Pascal
GNU C
GNU C++
Delphi Java Python 2.7
Mono C#
Python 3.1
Min время, сек 0.001 0.005 0.002 0.002 0.139 0.011 0.044 0.046
Среднее время, сек
0.004 0.005 0.007 0.008 0.258 0.043 0.044 0.078
Верных решений 28 1 38 28 8 3 2 26
Напишите программу, вычисляющую остаток от деления заданного «длинного»
числа на заданную цифру.
Входные данные
В первой строке задана цифра K (1≤K≤9). Во второй строке задано натуральное
число N, состоящее из не более чем 250 цифр.
Выходные данные
Выведите остаток от деления N на K.
Примеры
Входные данные Выходные данные
5
123456789
4
1
123
0
Задача D. Волшебные грибы
Ограничение по времени, сек 2
Ограничение по памяти, мегабайт 512
Язык GNU C GNU C++
Min время, сек 1.184 0.605
Среднее время, сек 1.428 1.336
Верных решений 2 22
На планете Руук существует Большая Корпорация Маленьких Фей. Одним из видов
деятельности, которым испокон веков занимаются ее сотрудницы, является
посадка грядок с волшебными грибами. Каждый день, начиная с самого первого
дня существования этой корпорации, феи создают одну новую грядку грибов.
После этого с новой грядки два дня можно собирать споры, которыми
размножаются эти грибы, а потом грядка будет поставлять уже только сам
продукт — грибы.
Таким образом, если обозначить количество грибов, посаженных на грядке,
созданной в день номер i, как ci, то оно будет считаться по формуле ci = ci - 1 + ci - 2.
Так, в первый и второй дни было посажено по одному грибу, в третий — два, в
четвертый — три, в пятый — пять и так далее.
Волшебные грибы являются самыми ценными сувенирами, которые путешественник
может привезти с планеты Руук. Поэтому первым, что делает любой приезжий,
становится поиск грядки с волшебными грибами. Однако, в последнее время все
чаще стали появляться сообщения о поддельных волшебных грибах. Тщательное
расследование показало, что это является следствием действий Маленькой
Корпорации Больших Фей, которая сажает грядки с грибами, внешне не
отличимыми, но далеко не такими ценными, как волшебные. Причем, создавая
очередную грядку, эти феи сажают туда такое количество грибов, какое их
соперницы никогда не сажали и не смогут посадить.
Казалось бы, после выяснения этого факта отличать волшебные грядки от
поддельных стало просто. Но обе корпорации существуют достаточно давно,
количество грядок и грибов на них давно превысило все разумные пределы. Вас
попросили написать программу, по количеству грибов на грядке сообщающую,
является ли эта грядка волшебной.
Входные данные
Первая строка входного файла содержит одно число N (1 ≤ N ≤ 1000000) —
количество исследуемых грядок. Следующие n строк содержат по одному целому
числу ai — количества грибов на исследуемых грядках. Размер входного файла не
превышает 1 Мб.
Выходные данные
Для каждого числа, данного во входном файле, выведите «Yes», если грядка с
таким количеством грибов является волшебной, и «No» — если не является. Ответы
разделяйте переводами строк.
Примечание
Решения, работающие для чисел, не превышающих 263 - 1, будут оцениваться из 30
баллов.
Решения, также работающие для входных данных, не превышающих 15 килобайт,
будут оцениваться из еще 30 баллов.
Примеры
входные данные
8
1
2
3
4
5
6
7
8
выходные данные
Yes
Yes
Yes
No
Yes
No
No
Yes
Задача E. Строчки Ограничение по времени, сек 1
Ограничение по памяти, мегабайт 32
Мальчик Кирилл написал однажды на листе бумаги строчку, состоящую из больших
и маленьких латинских букв, а после этого ушел играть в футбол. Когда он
вернулся, то обнаружил, что его друг Дима написал под его строкой еще одну
строчку такой же длины. Дима утверждает, что свою строчку он получил
циклическим сдвигом строки Кирилла направо на несколько шагов(циклический
сдвиг строки abcde на 2 позиции направо даст строку deabc). Однако Дима
известен тем, что может случайно ошибиться в большом количестве вычислений,
поэтому Кирилл в растерянности – верить ли Диме? Помогите ему!
По данным строкам выведите минимальный возможный размер сдвига или –1, если
Дима ошибся.
Входные данные
Первые две строки входного файла содержат строки Кирилла и Димы
соответственно. Длины строк одинаковы, не превышают 100000 и не равны 0.
Выходные данные
В выходной файл выведите единственное число – ответ на поставленную задачу
Примеры
входные данные
a
b
выходные данные
-1
входные данные
zabcd
abcdz
выходные данные
4
Задача F. Циклическая строка
Язык Free Pascal
GNU C
GNU C++
Delphi Java Python 2.7
Perl Mono C#
Python 3.1
Haskell
Min время, сек 0.001 0.002 0.002 0.002 0.11 0.026 0.484 0.08 0.062 0.524
Среднее время, сек
0.021 0.014 0.013 0.026 0.264 0.049 0.484 0.167 0.076 0.741
Верных решений
139 14 447 102 23 2 1 3 13 2
Максимальное время работы на одном тесте: 2 секунд
Строка S была записана много раз подряд, после чего из получившейся строки
взяли подстроку и дали вам. Ваша задача определить минимально возможную
длину исходной строки S.
Входные данные
На вход программы поступает строка, которая содержит только латинские буквы,
длина строки не превышает 50000 символов.
Выходные данные
Требуется вывести одно число – ответ на вопрос задачи.
В этой задаче слабые тесты, нужно добавить тестов
Примеры
входные данные
z
выходные данные
1
Задача G. A-функция от строчки Язык Free Pascal GNU C++ Delphi Python 3.1
Min время, сек 0.086 0.038 0.066 1.805
Среднее время, сек 0.26 0.159 0.936 1.805
Верных решений 7 73 38 1
Дана строка S, состоящая из N символов. Определим функцию A(i) от
первых i символов этой сроки следующим образом:
A(i) = максимально возможному k, что равны следующие строки:
S[1]+S[2]+S[3]+…+S[k]
S[i]+S[i–1]+S[i–2]+…+S[i–k+1]
где S[i] – i-ый символ строки S, а знак + означает, что символы записываются в
строчку непосредственно друг за другом.
Напишите программу, которая вычислит значения функции A для заданной строчки
для всех возможных значений i от 1 до N.
Входные данные
В первой строке входного файла записано одно число N. 1≤N≤200000. Во второй
строке записана строка длиной N символов, состоящая только из больших и/или
маленьких латинских букв.
Выходные данные
В выходной файл выведите N чисел — значения функции A(1), A(2), … A(N).
Примеры
входные данные
5
aabaa
выходные данные
1 2 0 1 5
Задача H. Подпалиндромы
Ограничение по времени, сек 2
Ограничение по памяти, мегабайт
64
Язык Free Pascal
GNU C++
Delphi Java
Min время, сек 0.01 0.006 0.009 0.26
Среднее время, сек
0.055 0.082 0.271 0.268
Верных решений 14 69 22 3
Строка называется палиндромом, если она читается одинаково как слева направо,
так и справа налево. Например, строки abba, ata являются палиндромами.
Дана строчка. Ее подстрокой называется некоторая непустая последовательность
подряд идущих символов. Напишите программу, которая определит, сколько
подстрок данной строки является палиндромами.
Входные данные
Вводится одна строка, состоящая из маленьких латинских букв. Длина строки не
превышает 100000 символов.
Выходные данные
Выведите одно число — количество подстрок данной строки, являющихся
палиндромами
Примеры
входные данные
aaa
выходные данные
6
входные данные
aba
выходные данные
4
Задача I. BWT Язык GNU C++ Delphi
Min время, сек 0.024 0.039
Среднее время, сек 0.111 0.089
Верных решений 28 13
Постройте все циклические сдвиги строки, отсортируйте их и выпишите последний
столбец.
Входные данные
Вводится строка, состоящая из маленьких латинских букв, ее длина не превосходит
30000 символов.
Выходные данные
В первой строке выведите два числа - позицию (при нумерации с единицы)
исходной строки в отсортированном массиве циклических сдвигов и длину строки.
Во второй строке выведите последний столбец таблицы циклических сдвигов.
Примеры
входные данные
irtucjb
выходные данные
3 7
jubcirt