Условие задачи | | Прогресс |
Темы:
Циклы
Комбинаторика
В ряд ставятся N кеглей. Громозека красит каждую из них в один из K цветов из своих банок с краской. Из эстетических соображений любые две соседних кегли должны быть окрашены в разные цвета. Найдите количество возможных способов раскрасить кегли.
Входные данные
Входная строка содержит два целых числа N и K (\(1<=N<=1000\), \(2<=K<=1000\)).
Выходные данные
Выведите на экран ответ на задачу. Гарантируется, что верный ответ не превышает \(2^{31}-1\).
Примеры
№ |
Входные данные |
Выходные данные |
1 |
2 2 |
2 |
1 |
1 10 |
10 |
| |
|
ID 38588.
Март
Темы:
Комбинаторика
Есть N человек. Имя i -го человека - Si . Мы хотим выбрать трех человек, чтобы выполнялись следующие условия:
- имя каждого выбранного человека начинается с M , А , R , С или Н ;
- среди выбранных людей нет людей, имена которых начинаются с одной буквы.
Сколько существует таких способов выбрать трех человек, не обращая внимания на порядок?
Входные данные
В первой строке записано целое число N (\(1<=N<=10^5\)) В следующих N строках записаны имена Si - строка, состоящая только из английских заглавных букв, длина строки не более 10 символов. Все имена различные.
Выходные данные
Выведите ответ на задачу. Обратите внимание, что ответ может не соответствовать 32-битному целочисленному типу.
Примеры
№ |
Входные данные |
Выходные данные |
Пояснение |
1 |
5
MASHIKE
RUMOI
OBIRA
HABORO
HOROKANAI |
2 |
Трех людей можно выбрать такими способами:
- MASHIKE, RUMOI, HABORO
- MASHIKE, RUMOI, HOROKANAI
Ответ: 2
|
2 |
4
ZZ
ZZZ
Z
ZZZZZZZZZZ |
0 |
|
3 |
5
CHOKUDAI
RNG
MAKOTO
AOKI
RINGO |
7 |
|
| |
|
Темы:
Комбинаторика
Динамическое программирование
У Громозеки N печенек. На i-й (1<=i<=N) печеньке написано целое число xi. Он выбирает одну или несколько из этих печенек, так чтобы среднее значение целых чисел, записанных на выбранных печеньках, было равно А.
Какими способами он может сделать свой выбор?
Входные данные
В первой строке вводятся два целых числа N (1<=N<=50) и A (1<=A<=50). Во второй строке N целых чисел - xi (1<=xi<=50).
Выходные данные
Выведите одно число - количество способов выбрать такие печеньки, чтобы среднее значение всех записанных чисел на печеньках было ровно A.
Примеры
№ |
Входные данные |
Выходные данные |
Примечение |
1 |
4 8
7 9 8 9 |
5 |
Ниже приведены 5 способов выбрать печеньки так, чтобы в среднем было 8.
1) Выберите 3-ю печеньку.
2) Выберите 1-ю и 2-ю печеньки.
3) Выберите 1-ю и 4-ю печеньки.
4) Выберите 1-ю, 2-ю и 3-ю печеньки.
5) Выберите 1-ю, 3-ю и 4-ю печеньки. |
2 |
3 8
6 6 9 |
0 |
|
3 |
8 5
3 6 2 8 7 6 5 9 |
19 |
|
4 |
33 3
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 |
8589934591 |
Ответ может не соответствовать 32-битному целому числу. |
| |
|
Темы:
Комбинаторика
Молчун, Ворчун и Пилюлькин играют в карточную игру на троих. Правила игры следующие.
Сначала у каждого из трех игроков есть колода, состоящая из некоторого количества карт.
В колоде Пилюлькина N карт, в колоде Молчуна M карт, а в колоде Ворчуна K карт. На каждой карточке написана буква p, m или v. Порядок карт в колодах не может быть изменен. Игроки ходят по очереди. Пилюлькин ходит первым.
Если в колоде текущего игрока есть хотя бы одна карта, сбросьте верхнюю карту в колоде.
Затем следующий ход переходит к игроку, имя которого начинается с буквы на сброшенной карте.Например, если на карте написано «p», следующий ход переходит Пилюлькину.
Если колода текущего игрока пуста, игра заканчивается, и текущий игрок выигрывает игру.
Есть 3N + M + K возможных вариантов раскладки начальных колод трех игроков.
Сколько из этих шаблонов приведет к победе Пилюлькина? Поскольку ответ может быть большим, выведите его по модулю 1000000007 (= 109 +7).
Входные данные
На вход подается три целых числа N, M и K (2<=N, M, K <=3*105).
Выходные данные
Выведите количество победных для Пилюлькина шаблонов по модулю 1000000007 (= 109 +7).
Примеры
№ |
Входные данные |
Выходные данные |
Пояснение |
1 |
1 1 1 |
17 |
Если карта Пилюлькина - p, то Пилюлькин выиграет независимо от карты Молчуна и Ворчуна. Таких вариантов 3 × 3 = 9.
Если карта Пилюлькина - m, Пилюлькин выиграет только тогда, когда карта Молчуна - p, или когда карта Молчуна - v, а карта Ворчуна - p. Всего таких шаблоно 3 + 1 = 4.
Если карта Пилюлькина - v, Пилюлькин выиграет только тогда, когда карта Ворчуна - p, или когда карта Ворчуна - m, а карта Ворчуна - p. Всего таких шаблонов 3 + 1 = 4.
Таким образом, всего 9 + 4 + 4 = 17 шаблонов, которые приведут к победе Пилюлькина. |
2 |
4 2 2 |
1227 |
|
3 |
1000 1000 1000 |
261790852 |
|
| |
|
Темы:
Циклы
Комбинаторика
Снежик Сугробович положил в ряд N ёлочных шаров, для того чтобы их покрасить. Он решил, что каждый шар будет одним из K цветов. При этом Снежик Сугробович хочет, чтобы любые два соседних ёлочных шара были окрашены в разные цвета. Найдите количество возможных способов раскрасить ёлочные шары.
Входные данные
Входная строка содержит два целых числа N и K (\(1<=N<=1000\), \(2<=K<=1000\)).
Выходные данные
Выведите на экран ответ на задачу. Гарантируется, что верный ответ не превышает \(2^{31}-1\).
Примеры
№ |
Входные данные |
Выходные данные |
1 |
2 2 |
2 |
1 |
1 10 |
10 |
| |
|
Темы:
Комбинаторика
Перебор
Артем создает интерактивный сенсор для игры в кости. Сенсор встроен в стол и может считать суммарное число точек на гранях всех брошенных костей, прилегающих к сенсору (то есть, на нижних гранях). Позже Артем понял, что для игры нужно считать сумму не на нижних, а на верхних гранях. Артем хочет написать программу, которая по сумме на нижних гранях сможет находить количество различных возможных сумм на верхних гранях. Но так как Артем не силен в программировании, он поручает эту задачу вам.
Сенсор выдает число s равное суммарному числу точек на нижних гранях игральных костей.
Все бросаемые кости шестигранные и удовлетворяют условию правильной игральной кости, то есть сумма точек на противоположных гранях кубика равна семи (1 и 6, 2 и 5, 3 и 4). Вам необходимо найти количество возможных сумм на верхних гранях кубиков.
Формат входных данных
В первой строке входного файла задано число s сумма на нижних гранях костей (s <= 105).
Формат выходных данных
Выведите одно число: количество различных всевозможных сумм на верхних гранях костей.
Пояснение к примеру
В первом примере на нижних гранях могло выпасть 1 + 1 или 2, суммы на верхних гранях 12 и
5, соответственно.
| |
|
Темы:
Комбинаторика
Информатика
Перестановкой размера n называется упорядоченный набор из n чисел, в котором каждое число от 1 до n встречается ровно один раз. Например, (4, 2, 3, 5, 1) - это перестановка размера 5.
Нам дано число n и последовательность a, в которой k натуральных чисел.
Вычислите, сколько существует перестановок размера n, которые не начинаются на данную последовательность.
Формат входных данных
В первой строке содержатся два натуральных числа n и k (1 <= n <= 9, 1 <= k <= 100) .
Во второй строке содержатся k натуральных чисел, составляющие последовательность a. Каждое из этих чисел не превышает 100.
Формат выходных данных
Выведите количество перестановок размера n- которые не начинаются на данную последовательность a.
Ввод |
Вывод |
3 2
2 1 |
5 |
5 2
4 4 |
120 |
5 6
2 3 9 5 6 6 |
120 |
| |
|
Темы:
Алгоритмы на графах
Конструктив
Комбинаторика
Boolean satisfiability problem (SAT) is known to be a very hard problem in computer science. In this problem you are given a Boolean formula, and you need to find out if the variables of a given formula can be consistently replaced by the values true or false in such a way that the formula evaluates to true. SAT is known to be NP-complete problem. Moreover, it is NP-complete even in case of 3-CNF formula (3-SAT). However, for example, SAT problem for 2-CNF formulae (2-SAT) is in P.
#SAT is the extension of SAT problem. In this problem you need to check if it is possible, and count the number of ways to assign values to variables. This problem is known to be #P-complete even for 2-CNF formulae. We ask you to solve #1-DNF-SAT, which is #SAT problem for 1-DNF formulae.
You are given a Boolean formula in 1-DNF form. It means that it is a disjunction (logical or) of one or more clauses, each clause is exactly one literal, each literal is either variable or its negation (logical not). Formally:
Your task is to find the number of ways to replace all variables with values true and false (all occurrences of the same variable should be replaced with same value), such that the formula evaluates to true.
Input
The only line of the input file contains a logical formula in 1-DNF form (not longer than 1000 symbols). Logical operations are represented by ‘|’ (disjunction) and ‘~’ (negation). The variables are ‘A’ . . . ‘Z’ and ‘a’ . . . ‘z’ (uppercase and lowercase letters are different variables). The formula contains neither spaces nor other characters not mentioned in the grammar.
Output
Output a single integer — the answer for #SAT problem for the given formula
Input |
Output |
a |
1 |
B|~B |
2 |
c|~C |
3 |
i|c|p|c |
7 |
| |
|
Темы:
Комбинаторика
В государстве Чудаков N городов ( 2 <=N <= 16 ), обозначаемых заглавными латинскими буквами, начиная с A, по порядку. Между некоторыми из них проложены дороги, которые могут быть как односторонними, так и двусторонними, причем не обязательно, что из каждого города можно проехать в любой другой.
В государстве всего один маршрут автобуса – 'Ч', который совершает только один рейс каждый день. Выходя из некоторого города, он совершает ровно N переездов между городами так, чтобы вернуться в тот, из которого выехал. Других ограничений на его маршрут нет. В течение дня автобус может несколько раз проезжать один и тот же город или дорогу. В каждом городе существуют автобусные парки, из которых могут выезжать автобусы маршрута 'Ч'. Так что, хотя автобус каждый день возвращается в город, из которого стартовал в этот день, на следующий день начало маршрута 'Ч' может быть из любого другого города. Но рейс каждый день только один.
Маршрут обозначается N буквами, начиная с города, из которого происходит выезд. Например, BCDCE – допустимый маршрут для государства из 5 городов ссоответствующими дорогами: выехать из B, проехать в C, затем в D, вернуться в C, проехать в E и вернуться в изначальный город B (последний пункт маршрута, совпадающий с первым, в маршруте не указывается).
Маршрут автобуса меняется каждый день так, что список маршрутов по дням расположен в словарном порядке и содержит все возможные маршруты. Когда список кончается, его обход начинается сначала. В первый день введения маршрута 'Ч' автобус шёл по первому по порядку маршруту. Выведите его маршрут на день K работы маршрута. Пример: В государстве четыре города: A, B, C, D. Наличие дорог между ними задано матрицей, где элемент равен 1, если из города, соответствующего строке, в город, соответствующий столбцу, есть дорога, и 0 – иначе (на главной диагонали нули – дорог, ведущих назад в тот же город, не бывает).
откуда/куда |
A |
B |
C |
D |
A |
0 |
0 |
1 |
1 |
B |
1 |
0 |
1 |
1 |
C |
0 |
1 |
0 |
0 |
D |
0 |
1 |
1 |
0 |
Полное расписание маршрутов в таком государстве выглядит так:
ADCB
BADC
BCBC
BCBD
BDBC
BDBD
CBAD
CBCB
CBDB
DBCB
DBDB
DCBA
Таким образом, например, маршрут на день 30 – это BDBD.
Формат входных данных
В первой строке указывается количество городов N ( 2<= N <= 16 ). Далее следует N строк по N элементов (цифр), разделенных пробелом, содержащих матрицу, задающую дороги между городами. Далее следует строка содержащая целое число D – номер дня, маршрут которого требуется определить ( 1<= D <= 264 ).
Формат выходных данных
В единственной строке указывается маршрут, т.е. порядок посещения городов, например BDBD (см. предыдущий пример).
Ввод |
Вывод |
3
0 1 1
1 0 1
1 1 0
4 |
BCA |
| |
|
Темы:
Динамическое программирование
Динамическое программирование: два параметра
Комбинаторика
Строки
<div>Ферма Джона представлена решёткой <strong>N×N</strong> полей (1≤N≤500). Каждое поле представлено символом латинского алфавита. Например:</div> <div>ABCD</div> <div>BXZX</div> <div>CDXB</div> <div>WCBA</div> <div>Каждый день корова Беси прогуливается из верхнего левого угла в правый нижний, каждый раз двигаясь на один шаг вправо или вниз. Беси записывает в строку буквы, по которым прошлась. Она огорчится, если у неё получится палиндром (слово, которое читается одинаково слева направо и справа налево), поскольку тогда она запутается, в каком направлении двигалась.</div> <div> </div> <div>Пожалуйста, помогите Беси определить количество различных маршрутов которыми она может получить палиндромы. Различные пути, которыми получаются одинаковые палиндромы учитывать множество раз. Выведите свой ответ по модулю 1,000,000,007.</div> <div> </div> <div><strong>ФОРМАТ ВВОДА</strong>:</div> <div>Первая строка ввода содержит N, и последующие N строк содержат N строк решётки, описывающей поля. Каждая строка содержит N символов в интервале A..Z.<br /> <div><strong>ФОРМАТ ВЫВОДА</strong>:</div> <div>Выведите количество различных путей Беси, формирующих палиндромы по модулю 1,000,000,007.</div> <table border="1" cellpadding="1" cellspacing="1" style="width: 500px"> <tbody> <tr> <td>Ввод</td> <td>Вывод</td> </tr> <tr> <td> <div>4</div> <div>ABCD</div> <div>BXZX</div> <div>CDXB</div> <div>WCBA</div> </td> <td>12</td> </tr> </tbody> </table> </div> Примечание: <div>Беси может сделать следующие палиндромы:</div> <div> </div> <div>1 x "ABCDCBA"</div> <div>1 x "ABCWCBA"</div> <div>6 x "ABXZXBA"</div> <div>4 x "ABXDXBA"</div>
| |
|
Темы:
Динамическое программирование: один параметр
Динамическое программирование: два параметра
Динамическое программирование
Комбинаторика
Фермер Джон придумал игру для своих коров
Она играется на решётке R*C (2 <= R <= 750, 2 <= C <= 750), где каждый квадрат помечен целым числом от 1 до K (1 <= K <= R*C). Коровы выполняют последовательность прыжков, начиная в левом верхнем квадрате и заканчивая в правом нижнем квадрате и прыжок является корректным если и только если:
1) Вы прыгаете на квадрат c другим числом
2) Квадрат, куда Вы прыгаете, как минимум на одну строку ниже квадрата, в котором Вы сейчас стоите
3) Квадрат, в который Вы прыгаете как минимум на одну колонку правее квадрата, в котором Вы сейчас стоите
Пожалуйста, помогите коровам вычислить количество возможных различных последовательностей корректных прыжков из левого верхнего квадрата в правый нижний.
INPUT FORMAT:
Первая строка ввода содержит целые числа R, C, K. Каждая из следующих R строк содержит C целых чисел, каждое в интервале 1..K.
OUTPUT FORMAT:
Выведите количество различных способов пропрыгать из левого верхнего угла в правый нижний, по модулю 1000000007.
Ввод |
Вывод |
4 4 4
1 1 1 1
1 3 2 1
1 2 4 1
1 1 1 1
|
5 |
| |
|
Темы:
Комбинаторика
Алгоритмы на графах
Динамическое программирование
Однажды Юрик оказался в лесу у костра, где собрались \(n\) человек. Оказалось, что некоторые из них знакомы друг с другом. Для удобства пронумеруем людей целыми числами от \(1\) до \(n\). Обозначим как \(d_i\) количество людей, сидящих у костра, с которыми знаком \(i\)-й человек. Неожиданно оказалось, что два человека с номерами \(i\) и \(j\) (\(i \ne j\)) знакомы друг с другом тогда и только тогда, когда \(d_i = d_j\).
Вернувшись домой, Юрик задумался, какое минимальное количество пар людей могли быть знакомы, чтобы выполнялось это условие?
Формат входных данных
Единственная строка содержит одно целое число \(n\) (\(1 \le n \le 5\,000\)) — количество людей.
Формат выходных данных
Выведите одно целое число — минимальное количество пар знакомых людей.
Замечание
Рассмотрим первый пример из условия. Возможны следующие варианты:
-
Любые два человека знакомы друг с другом. В этом случае количество пар знакомых людей равно \(\frac{4 \cdot 3}{2} = 6\).
-
Некоторые три человека попарно знакомы друг с другом, четвертый человек не знаком ни с кем. В этом случае количество пар знакомых людей равно \(3\).
| |
|
ID 55691.
Клад
Темы:
Комбинаторика
Динамическое программирование на графах
Однажды Юрик оказался в лесу у костра, где собрались \(n\) человек. Оказалось, что некоторые из них знакомы друг с другом. Для удобства пронумеруем людей целыми числами от \(1\) до \(n\). Обозначим как \(d_i\) количество людей, сидящих у костра, с которыми знаком \(i\)-й человек. Неожиданно оказалось, что два человека с номерами \(i\) и \(j\) (\(i \ne j\)) знакомы друг с другом тогда и только тогда, когда \(d_i = d_j\).
Вернувшись домой, Юрик задумался, какое минимальное количество пар людей могли быть знакомы, чтобы выполнялось это условие?
Формат входных данных
Единственная строка содержит одно целое число \(n\) (\(1 \le n \le 5\,000\)) — количество людей.
Формат выходных данных
Выведите одно целое число — минимальное количество пар знакомых людей.
Рассмотрим первый пример из условия. Возможны следующие варианты:
-
Любые два человека знакомы друг с другом. В этом случае количество пар знакомых людей равно \(\frac{4 \cdot 3}{2} = 6\).
-
Некоторые три человека попарно знакомы друг с другом, четвертый человек не знаком ни с кем. В этом случае количество пар знакомых людей равно \(3\).
| |
|