12
:: Данные вводятся с клавиатуры или из файла 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 символов, состоящие из строчных латинских букв. Структура данных должна поддерживать операции добавления строки в множество и проверки принадлежности данной строки множеству. Максимальное количество элементов в хранимом множестве не превосходит 10 6 . Входные данные Каждая строка входных данных задает одну операцию над множеством. Запись операции состоит из типа операции и следующей за ним через пробел строки, над которой проводится операция. Тип операции – один из двух символов: + означает добавление данной строки в множество; ? означает проверку принадлежности данной строки множеству. Общее количество операций во входном файле не превосходит 10 6 . Список операций завершается строкой, в которой записан один символ # – признак конца входных данных. При добавлении элемента в множество НЕ ГАРАНТИРУЕТСЯ, что он отсутствует в этом множестве. Выходные данные Программа должна вывести для каждой операции типа ? одну из двух строк YES или NO, в зависимости от того, встречается ли данное слово в нашем множестве. Примеры входные данные + hello ? hello ? bye + bye ? bye # выходные данные

Задача A. Хеширование1).pdf · C++ Delphi Java Python 2.7 Haskell Min время, сек 0.42 0.344 0.327 0.521 3.784 1.096 3.176 Среднее время, сек

  • Upload
    others

  • View
    101

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Задача A. Хеширование1).pdf · C++ Delphi Java Python 2.7 Haskell Min время, сек 0.42 0.344 0.327 0.521 3.784 1.096 3.176 Среднее время, сек

:: Данные вводятся с клавиатуры или из файла 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

#

выходные данные

Page 2: Задача A. Хеширование1).pdf · C++ Delphi Java Python 2.7 Haskell Min время, сек 0.42 0.344 0.327 0.521 3.784 1.096 3.176 Среднее время, сек

YES

NO

YES

Page 3: Задача A. Хеширование1).pdf · C++ Delphi Java Python 2.7 Haskell Min время, сек 0.42 0.344 0.327 0.521 3.784 1.096 3.176 Среднее время, сек

Задача 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

#

Page 4: Задача A. Хеширование1).pdf · C++ Delphi Java Python 2.7 Haskell Min время, сек 0.42 0.344 0.327 0.521 3.784 1.096 3.176 Среднее время, сек

выходные данные

YES

NO

YES

Page 5: Задача A. Хеширование1).pdf · C++ Delphi Java Python 2.7 Haskell Min время, сек 0.42 0.344 0.327 0.521 3.784 1.096 3.176 Среднее время, сек

Задача 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

Page 6: Задача A. Хеширование1).pdf · C++ Delphi Java Python 2.7 Haskell Min время, сек 0.42 0.344 0.327 0.521 3.784 1.096 3.176 Среднее время, сек

Задача 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 Мб.

Выходные данные

Page 7: Задача A. Хеширование1).pdf · C++ Delphi Java Python 2.7 Haskell Min время, сек 0.42 0.344 0.327 0.521 3.784 1.096 3.176 Среднее время, сек

Для каждого числа, данного во входном файле, выведите «Yes», если грядка с

таким количеством грибов является волшебной, и «No» — если не является. Ответы

разделяйте переводами строк.

Примечание

Решения, работающие для чисел, не превышающих 263 - 1, будут оцениваться из 30

баллов.

Решения, также работающие для входных данных, не превышающих 15 килобайт,

будут оцениваться из еще 30 баллов.

Примеры

входные данные

8

1

2

3

4

5

6

7

8

выходные данные

Yes

Yes

Yes

No

Yes

No

No

Yes

Page 8: Задача A. Хеширование1).pdf · C++ Delphi Java Python 2.7 Haskell Min время, сек 0.42 0.344 0.327 0.521 3.784 1.096 3.176 Среднее время, сек

Задача E. Строчки Ограничение по времени, сек 1

Ограничение по памяти, мегабайт 32

Мальчик Кирилл написал однажды на листе бумаги строчку, состоящую из больших

и маленьких латинских букв, а после этого ушел играть в футбол. Когда он

вернулся, то обнаружил, что его друг Дима написал под его строкой еще одну

строчку такой же длины. Дима утверждает, что свою строчку он получил

циклическим сдвигом строки Кирилла направо на несколько шагов(циклический

сдвиг строки abcde на 2 позиции направо даст строку deabc). Однако Дима

известен тем, что может случайно ошибиться в большом количестве вычислений,

поэтому Кирилл в растерянности – верить ли Диме? Помогите ему!

По данным строкам выведите минимальный возможный размер сдвига или –1, если

Дима ошибся.

Входные данные

Первые две строки входного файла содержат строки Кирилла и Димы

соответственно. Длины строк одинаковы, не превышают 100000 и не равны 0.

Выходные данные

В выходной файл выведите единственное число – ответ на поставленную задачу

Примеры

входные данные

a

b

выходные данные

-1

входные данные

zabcd

abcdz

выходные данные

4

Page 9: Задача A. Хеширование1).pdf · C++ Delphi Java Python 2.7 Haskell Min время, сек 0.42 0.344 0.327 0.521 3.784 1.096 3.176 Среднее время, сек

Задача 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

Page 10: Задача A. Хеширование1).pdf · C++ Delphi Java Python 2.7 Haskell Min время, сек 0.42 0.344 0.327 0.521 3.784 1.096 3.176 Среднее время, сек

Задача 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

Page 11: Задача A. Хеширование1).pdf · C++ Delphi Java Python 2.7 Haskell Min время, сек 0.42 0.344 0.327 0.521 3.784 1.096 3.176 Среднее время, сек

Задача 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

Page 12: Задача A. Хеширование1).pdf · C++ Delphi Java Python 2.7 Haskell Min время, сек 0.42 0.344 0.327 0.521 3.784 1.096 3.176 Среднее время, сек

Задача I. BWT Язык GNU C++ Delphi

Min время, сек 0.024 0.039

Среднее время, сек 0.111 0.089

Верных решений 28 13

Постройте все циклические сдвиги строки, отсортируйте их и выпишите последний

столбец.

Входные данные

Вводится строка, состоящая из маленьких латинских букв, ее длина не превосходит

30000 символов.

Выходные данные

В первой строке выведите два числа - позицию (при нумерации с единицы)

исходной строки в отсортированном массиве циклических сдвигов и длину строки.

Во второй строке выведите последний столбец таблицы циклических сдвигов.

Примеры

входные данные

irtucjb

выходные данные

3 7

jubcirt