Страница: << 55 56 57 58 59 60 61 >> Отображать по:
ограничение по времени на тест
5.0 second;
ограничение по памяти на тест
128 megabytes

Система телефонных номеров в России устроена следующим образом. Все телефонные номера имеют одну и ту же длину — M цифр. Номер состоит из двух частей: несколько первых цифр номера составляют код города, остальные цифры определяют номер абонента в пределах этого города.

В процессе развития сети коды городов регулярно меняются, при этом, коды различных городов обязательно различны. В остальном коды могут быть совершенно произвольными, в том числе код одного города может быть началом кода другого (например, код Нижнего Новгорода — 831, а код Сарова — 83130) и т. п. Если коды нескольких городов являются началом M-значного номера абонента, кодом города этого номера считается наидлиннейший из таких кодов. Так, если есть всего четыре города: Нижний Новгород, Балахна, Дзержинск и Саров с кодами, соответственно, 831, 83144, 8313 и 83130, и M = 9, то: телефоны 831123456 и 831412345 — телефоны Нижнего Новгорода, 831312345 — телефон Дзержинска, 831301234 — Сарова, а 831441234 — Балахны.

В этой задаче мы не будем учитывать различные другие ограничения на телефонные номера, существующие в реальности (например, в реальности никакой номер абонента в городе не может начинаться на 03, т. к. 03 — это телефон скорой помощи). Мы будем считать, что любой из 10M возможных M-значных номеров является допустимым телефонным номером.

Нетривиальной задачей становится задача определения, сколько всего телефонных номеров может быть выдано в каждом городе. Например, в приведённом выше примере в Балахне и Сарове могут быть выданы 10 000 телефонных номеров (все четырёхзначные номера), в Дзержинске могут быть выданы 90000 телефонных номеров — все пятизначные телефонные номера, кроме начинающихся на ноль, а в Нижнем Новгороде могут быть выданы 890 000 номеров — все шестизначные номера, кроме тех, которые начинаются на цифру 3, а также на последовательность 44.

Напишите программу, которая решит эту задачу для произвольного набора кодов городов.

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

На первой строке входного файла находятся два числа N и M — количество городов и длина полного телефонного номера (1 ≤ N ≤ 100 000, 1 ≤ M ≤ 9). Далее следуют N строк, в каждой из которых находится код очередного города и название города, между которыми находится ровно один пробел. Название города состоит только из заглавных и маленьких латинских букв и не превышает по длине 20 символов. Гарантируется, что в каждой из этих строк входного файла будет ровно один пробел — между кодом города и его названием.

Города во входном файле отсортированы по алфавитному порядку кодов. Гарантируется, что никакие два кода и никакие два названия города не совпадают.

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

В выходной файл выведите N строк. В каждой строке выведите название города и количество телефонных номеров, которые можно выдать в этом городе. Отделяйте название города и количество номеров как минимум одним пробелом. Вы также можете выводить лишние пробелы в начало и конец каждой строки; они будут игнорироваться.

Города можете выводить в произвольном порядке.

Примеры
Входные данные
4 9
831 NizhnyNovgorod
8313 Dzerzhinsk
83130 Sarov
83144 Balakhna
Выходные данные
Sarov 10000
Dzerzhinsk 90000
Balakhna 10000
NizhnyNovgorod 890000
ограничение по времени на тест
2.0 second;
ограничение по памяти на тест
64 megabytes

Рассмотрим произвольную последовательность целых чисел. Между числами можно расставить знаки арифметических операций + или – , и таким образом получать некоторые выражения, которые принимают различные значения. Например, если взять последовательность: 17, 5,  - 21, 15, то можно получить восемь различных выражений:

Назовем последовательность делящейся на натуральное K, если + и – могут быть расставлены так, что итоговое значение выражения будет делиться на K. В приведенном примере последовательность делится на 7  (17 + 5 +  - 21 - 15 =  - 14), но не делится на 5.

17

+

5

+

-21

+

15

=

16

17

+

5

+

-21

-

15

=

-14

17

+

5

-

-21

+

15

=

58

17

+

5

-

-21

-

15

=

28

17

-

5

+

-21

+

15

=

6

17

-

5

+

-21

-

15

=

-24

17

-

5

-

-21

+

15

=

48

17

-

5

-

-21

-

15

=

18

Ваша задача — написать программу, определяющую делимость последовательности на целое число.

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

Первая строка содержит два натуральных числа N и K(1 ≤ N ≤ 10000, 2 ≤ K ≤ 100), разделенные пробелом. Вторая строка состоит из N целых чисел, разделенных пробелами. Все числа не превосходят 10000 по модулю.

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

Выведите в выходной файл "Divisible", если данная последовательность делится на K или "Not divisible", в противном случае.

Примеры
Входные данные
4 7
17 5 -21 15
Выходные данные
Divisible
Входные данные
4 5
17 5 -21 15
Выходные данные
Not divisible
ограничение по времени на тест
1.0 second;
ограничение по памяти на тест
8 megabytes

Новый Мытищинский театр «Фэст» украшен гигантской гирляндой, управляемой компьютером, в которой используются тысячи лампочек. Каждый ряд лампочек в гирлянде управляется набором переключателей, которые контролируются с использованием специальной компьютерной программы. К сожалению, электрики установили неверный набор переключателей, а сегодня вечером состоится открытие театра. Ваша задача — написать программу, которая бы заставила переключатели работать корректно. Ряд лампочек в гирлянде состоит из n лампочек и контролируется n переключателями. Лампочки и переключатели занумерованы слева направо от 1 до n. Каждая лампочка может быть либо включена, либо выключена. Каждый тестовый пример в этой задаче будет содержать начальную и желаемую конечную конфигурации лампочек. Исходно предполагалось, что каждый переключатель будет контролировать одну лампочку. Однако ошибка в электронике привела к тому, что каждый переключатель помимо своей лампочки также изменяет состояние двух (или одной, если основная лампочка находится c краю) соседних с ней. Так, самый левый переключатель (i = 1) изменяет состояние двух самых левых лампочек (1 и 2), а самый правый (i = n) — двух самых правых (n - 1 и n). Каждый из оставшихся переключателей (1 ≤ i ≤ n) изменяет состояние трех лампочек с номерами i - 1, i и i + 1. Исключение составляет единственный случай, когда имеется ровно одна лампочка и один переключатель. В этом случае этот переключатель контролирует эту лампочку. Таким образом, если, к примеру, лампочка 1 включена, а лампочка 2 выключена, то при нажатии на переключатель 1 лампочка 1 выключится, а лампочка 2 включится. Определим минимальную стоимость перехода из одной конфигурации к другой как минимальное количество переключателей, которое требуется нажать, чтобы получить из начальной конфигурации конечную.

Можно представить состояние ряда лампочек как двоичное число, где 0 означает, что лампочка выключена, а 1 — что лампочка включена. Так, в частности, двоичное число 01100 представляет собой ряд из пяти лампочек, среди которых вторая и третья включены, а остальные выключены. Можно превратить эту конфигурацию в конфигурацию 10000, нажав последовательно на переключатели 1, 4 и 5, но дешевле сделать это, просто изменив состояние переключателя 2. Напишите программу, которая определит, на какие переключатели следует нажать, чтобы перевести начальную конфигурацию лампочек в конченую за минимальной стоимость. В некоторых случаях подобное может оказаться невозможным. Отметим, что для компактности представления двоичные числа записываются как десятичные, то есть вместо 01100 и 10000 используются числа 12 и 16 соответственно.

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

Входной файл содержит несколько тестовых примеров. Каждый тестовый пример занимает одну строку. Строка содержит два неотрицательных целых десятичных числа, по крайней мере одно из которых положительно и каждое из которых содержит не более 100 цифр. Двоичная запись первого числа представляет собой начальную конфигурацию, а второго — конечную. Чтобы избежать проблем с ведущими нулями, будем предполагать, что первая лампочка либо в начальной, либо в конченой конфигурации включена. Во входном файле не будет пробелов в начале или конце строки, числа записаны без ведущих нулей и разделены ровно одним пробелом. Последняя строка входного файла содержит два нуля.

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

Для каждого тестового примера выведите в выходной файл одну строку. Она должна содержать номер тестового примера и десятичное число, двоичное представление которого кодирует набор переключателей, которые требуется нажать, чтобы из начальной конфигурации получить конечную. В двоичном представлении этого числа самый правый (наименее значимый) бит должен соответствовать переключателю с номером n, 1 означает, что переключатель следует нажать, а 0 — что нет. Если решения не существует, то вместо этого числа следует вывести слово “impossible”. Если имеется более одного решения, выведите то, которое представляется меньшим десятичным числом. Разделяйте вывод для тестовых примеров пустой строкой. Используйте формат, приведенный в примере.

Примеры
Входные данные
12 16
1 1
3 0
30 5
7038312 7427958190
4253404109 657546225
0 0
Выходные данные
Case Number 1: 8

Case Number 2: 0

Case Number 3: 1

Case Number 4: 10

Case Number 5: 2805591535

Case Number 6: impossible

ограничение по времени на тест
1.0 second;
ограничение по памяти на тест
8 megabytes

В телеигре "The Price is Right" игроки (обычно четверо) соревнуются в угадывании стоимости того или иного предмета. Побеждает тот, кто назвал наиболее близкое число, не превосходящее ответа. Ввиду популярности телеигры "Кто Хочет Стать Миллионером", в которой участвует один игрок, American Contest Management (ACM) решило выпустить свою версию игры «The Price is Right» для одного игрока. В этой версии каждому участнику даётся G (1 ≤ G ≤ 30) попыток и L (0 ≤ L ≤ 30) жизней. Игроку требуется точно угадать стоимость предмета. Если очередная попытка верна, то игрок выигрывает. В противном случае он теряет попытку. Помимо того, если он называет число, большее ответа, то также теряет одну жизнь. Игрок проигрывает, если у него не остаётся попыток или он называет большую стоимость, не имея ни одной жизни. Все цены положительные целые числа. Оказывается, что для некоторых значений G и L при условии, что искомая стоимость лежит в интервале от 1 до N включительно, можно избрать заведомо выигрышную стратегию. ACM не хочет, чтобы выигрывал каждый участник, поэтому организаторы хотят быть уверены, что настоящая стоимость превосходит N. Но в то же время нельзя делать игру слишком сложной, поскольку в противном случае победителей будет слишком мало, и игра быстро потеряет популярность. Поэтому организаторы хотят подобрать значения G и L в зависимости от искомой стоимости. В связи с этим ACM попросило вас решить следующую задачу: по заданным значениям G и L найти максимальное значение N, при котором игрок может воспользоваться заведомо выигрышной стратегией.

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

На вход может подаваться сразу несколько тестов. Каждый тест задаётся строкой из двух целых чисел G и L, разделённых пробелом. Признаком конца ввода является строка, содержащая G = L = 0.

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

Для каждого теста выведите строку в следующем формате: Case c: N, где с — номер теста, а N — ответ на вопрос задачи.

Примеры
Входные данные
3 0
3 1
10 5
7 7
0 0
Выходные данные
Case 1: 3
Case 2: 6
Case 3: 847
Case 4: 127
ограничение по времени на тест
2.0 second;
ограничение по памяти на тест
64 megabytes

Будем называть пару строк (α, β) подпарой строки γ если γ = γ1α γ2β γ3 для некоторых (возможно пустых) строк γ1, γ2, γ3. Длиной пары строк будем называть сумму длин составляющих ее строк: |(α, β)| = |α| + |β|.

По заданным двум строкам ξ и η найдите их длиннейшую общую подпару, то есть такую пару строк (α, β), что она является подпарой как ξ, так и η, и ее длина максимальна.

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

Входной файл содержит две непустых строки ξ и η, состоящие из маленьких букв латинского алфавита. Длина каждой из строк не превышает 3000.

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

Выведите α на первой строке и β на второй строке.

Примеры
Входные данные
abacabadabacaba
acabacadacabaca
Выходные данные
abaca
acaba
Входные данные
ab
bc
Выходные данные
b

Страница: << 55 56 57 58 59 60 61 >> Отображать по:
Выбрано
:
Отменить
|
Добавить в контест