Алгоритмы(1657 задач)
Структуры данных(279 задач)
Интерактивные задачи(17 задач)
Другое(54 задач)
В одном курином ресторане можно купить:
Требуется определить, можно ли купить ровно k крыльев, n ножек и b бедер
Вводятся три числа k, n, b. Все числа целые неотрицательные, не превосходящие 104.
Выведите слово YES, если купить указанный набор можно, NO если нельзя (заглавными латинскими буквами).
1 1 1
YES
1 3 1
NO
1 1 2
YES
Одно из известных развлечений со словами — составление палиндромов. Палиндромом называется предложение, которое, после удаления из него всех пробелов и знаков препинания, читается одинаково справа налево и слева направо. Создатели одного известного текстового редактора пишут новую версию модуля для проверки орфографии. Они хотят реализовать возможность вывода подсказки для пользователя на тот случай, если он допустил опечатку при наборе какого-нибудь палиндрома. Конечно же, они решили обратиться именно к вам.
Более точно, по заданной строке нужно определить, может ли она быть результатом замены, удаления или добавления одного символа в некотором палиндроме. При этом строчные и прописные латинские буквы не различаются, а все остальные символы должны игнорироваться.
Во входном файле содержится заданная строка. Гарантируется, что она содержит хотя бы одну букву. Длина строки не превосходит 100 000.
В первой строке выходного файла выведите YES, если строка может быть получена каким-нибудь из описанных выше преобразований из некоторого палиндрома, и NO в противном случае.
В случае положительного ответа во второй строке выведите какой-нибудь из палиндромов, в которых мог допустить опечатку пользователь
Never odd or even
YES NEVERODDOREVEN
Eat it!
NO
Mums are not set as a test on Erasmus.
YES SUMSARENOTSETASATESTONERASMUS
Большое количество соревнований по разным видам спорта проводится по так называемой "олимпийской системе". В простейшем варианте она состоит в следующем. В турнире участвуют N = 2k игроков. Они получают номера от 1 до N, и в первом круге игрок 1 играет с игроком 2, игрок 3 с игроком 4 и т. д., игрок (N - 1) — с игроком N. Проигравшие в каждой паре выбывают из соревнований, а победители проходят во второй круг. Там победитель первой пары (т. е. игрок 1 или игрок 2) играет с победителем второй пары и т. д. Таким образом, в первом круге участвуют N = 2k игроков, во втором круге —
= 2k - 1 и т. д., в финале участвуют два игрока.
Серьезной проблемой является то, что некоторые сильные игроки могут встретиться между собой уже в одном из первых кругов, в результате чего некоторые сильные участники могут рано выбыть из борьбы, в то время как другие, менее сильные участники, могут пройти намного выше, если им повезет с соперниками. Для борьбы с этим эффектом применяется так называемый “рассев” игроков, когда начальная нумерация участников не является полностью случайной, и вероятность “везения”/”невезения” с соперниками резко уменьшается.
В этой задаче вам нужно будет написать программу, находящую в некотором смысле оптимальный “рассев” игроков. Для этого рассмотрим следующую модель. Предположим, что участников можно упорядочить по силе так, что более сильный игрок всегда будет выигрывать у более слабого. В таком случае по изначальному “рассеву” игроков дальнейший ход соревнований будет однозначно определен. Тогда в качестве критерия оптимальности рассева” можно потребовать выполнение следующих условий: в финале играют двое сильнейших игроков, в полуфиналах играют четверо сильнейших игроков, и т. д.: в каждом круге играют только сильнейшие игроки (т. е. если в каком-то круге m мест, то в этом круге должны участвовать m сильнейших игроков). Вам дано N. Найдите любой оптимальный рассев N игроков.
Входной файл содержит одно число N. Гарантируется, что N — степень двойки и что 1 ≤ N ≤ 217.
Занумеруем игроков по их силе от 1 до N (1 — наиболее сильный, N — наименее). Выведите в выходной файл N чисел, i-ое из которых будет номером игрока, который должен стоять на i-ом месте в оптимальном рассеве. Если оптимального рассева не существует, выведите - 1.
4
1 3 2 4
Для заданного натурального N найти последнюю ненулевую цифру числа N!.
Входной файл содержит число N (0 ≤ N ≤ 1 000 000).
Выходной файл должен содержать одну цифру — последнюю ненулевую.
8
2
10
8
Зачет проводится в аудитории, в которой стоит один большой круглый стол, за которым ровно N мест; студентов в группе тоже ровно N. За время семестра преподаватель успел выделить несколько пар студентов, которые, по его мнению, могут списывать друг у друга, при этом каждый студент входит не более чем в одну такую пару. Теперь он хочет придумать такую рассадку для студентов, чтобы они все решали задачи самостоятельно.
Преподаватель считает, что списывать сложнее всего, если тот, у кого списывают, находится на расстоянии ровно L от того, кто списывает. Таким образом, преподаватель хочет рассадить студентов так, чтобы между каждыми двумя студентами, которые могут списывать друг у друга, сидело бы ровно L - 1 других студентов. Помогите преподавателю найти такую рассадку. Примечание. Ясно, что в зависимости от того, с какого именно из двух студентов начинать считать, и в зависимости от того, в какую сторону считать, получится разное количество человек, сидящих между ними. Преподавателю требуется лишь, чтобы для каждой пары, начиная с хотя бы какого-нибудь из этих двух студентов, хотя бы в какую-нибудь сторону до другого насчитывался бы ровно L - 1 студент.
Первая строка входного файла содержит три числа: N, L и K, где N — количество студентов в группе, L — оптимальное “антисписывательное” расстояние, а K — количество пар студентов, которые могут друг у друга списывать. Далее следуют K строк по два числа в каждой — номера студентов, входящих в очередную пару. Студенты нумеруются от 1 до N. Все числа во входном файле натуральные и не превосходят 8 000 гарантируется, что L ≤ N.
Если искомая рассадка существует, то выведите в выходной файл любой из возможных ответов, т. е. N чисел — номера студентов в порядке обходе стола против часовой стрелки, начиная с любого места. Если решения не существует, то выведите - 1.
5 3 2 1 4 2 3
1 2 5 4 3