Алгоритмы(1657 задач)
Структуры данных(279 задач)
Интерактивные задачи(17 задач)
Другое(54 задач)
Недавно одна очень известная в старину компания, решила выпустить ремейк очень популярной игры - Тетрис. Админ Вася, как человек искренне уважающий все, связанное с историей Информационных Технологий, считает своим долгом поиграть в новый Тетрис-3000. Как и все современные ремейки, Тетрис-3000 является, упрощённой версией старого доброго тетриса, с красивой графикой. Казалось, что можно упростить в Тетрисе, но создатели решили, что теперь все кубики, под которыми не находится никакой другой кубик, должны сразу падать вниз, и не образовывать сложные фигуры с дырками, расстраивая тем самым, незадачливых игроков. К тому же авторы ремейка решили, что удалять ряд, как только он заполниться это слишком сложно, поэтому теперь ряды не стираются. Игра по прежнему заканчивается, как только игрок не сможет уместить очередную фигуру на поле, ну а счет его зависит от количества фигур, которые ему разместить все же удалось.
Пожалуй не стоит даже говорить, что такого разочарования от ремейков классики, Вася не испытывал никогда в своей жизни. Единственное, что привлекло его внимание, и чуть-чуть подняло настроение, это анимация исчезновения кубиков, после проигрыша.
В момент проигрыша поле Тетриса представляет из себя прямоугольник шириной N , вдоль нижней грани которого находятся столбики из кубиков. За одну секунду из каждого столбика убирается количество кубиков равное высоте самого низкого столбика. После его исчезновения на поле остается новый самый низкий столбик и процесс повторяется пока на поле есть хоть один кубик.
Вася хочет, зная высоту каждого столбика на поле в момент проигрыша, посчитать сколько времени займет анимация проигрыша в этот раз.
В первой строке записано, единственное число N (1 ≤ N ≤ 10 3 ) . Во второй строке записано N чисел, высоты столбцов в порядке слева направо: h i (0 ≤ h i ≤ 10 9 ) — высота i -го столбца
Выведите единственное число, длительность анимации завершения игры в секундах
7 1 3 4 1 4 4 2
4
(Задача отличается от предыдущых исключительно ограничениями.)
Есть сообщение, записанное в алфавите из N символов. Известно, что 1-й, 2-й, ..., N -й символы алфавита использованы в сообщении f 1 , f 2 , ..., f N раз. Его необходимо набрать на M -клавишной клавиатуре, используя способ набора, аналогичный используемому в мобильных телефонах.
На телефоне, клавише 2 сопоставлены буквы abc, клавише 3 — def, и т.д. Для набора текста телефон переводится в специальный режим, в котором одно нажатие на клавишу 2 порождает символ a, 2 подряд нажатия на 2 символ b, 3 подряд символ c; аналогично, одно нажатие 3 порождает d, 2 подряд e и т. д. Если же необходимо набрать 2 подряд буквы a, то нажимают клавишу 2, немного ждут и снова нажимают клавишу 2.
В нашем случае, символы с 1-ого по некоторый K 1 -ый должны соответствовать 1-ой клавише, с ( K 1 + 1) -ого по некоторый K 2 -ой — 2-ой клавише и т. д., до K M = N . Конкретные значения K 1 , K 2 , ..., K M - 1 не задаются — их, наоборот, нужно подобрать.
Напишите программу, которая будет искать минимальное необходимое количество нажатий на клавиши для набора указанного сообщения на указанной клавиатуре.
В первой строке содержатся два числа N и M , во второй — N чисел f 1 , f 2 , ..., f N — количества вхождений соответствующего символа. Числа внутри строк разделены одинарными пробелами. 2 ≤ M ≤ 1500 , 3 ≤ N ≤ 2000 , M < N , 1 ≤ f i ≤ 1000 .
Необходимо вывести единственное число — найденное минимальное количество нажатий на клавиши.
Значение 21 достигается при K 1 = 2 , K 2 = 3 (1-й и 2-й символы сопоставить 1-й клавише, 3-й символ 2-й клавише, 4-й и 5-й символы 3-й клавише). Тогда количество нажатий будет
(3 × 1 + 2 × 2) + (5 × 1) + (7 × 1 + 1 × 2) = 21 .
5 3 3 2 5 7 1
21
(Задача отличается от предыдущых исключительно ограничениями.)
Есть сообщение, записанное в алфавите из N символов. Известно, что 1-й, 2-й, ..., N -й символы алфавита использованы в сообщении f 1 , f 2 , ..., f N раз. Его необходимо набрать на M -клавишной клавиатуре, используя способ набора, аналогичный используемому в мобильных телефонах.
На телефоне, клавише 2 сопоставлены буквы abc, клавише 3 — def, и т.д. Для набора текста телефон переводится в специальный режим, в котором одно нажатие на клавишу 2 порождает символ a, 2 подряд нажатия на 2 символ b, 3 подряд символ c; аналогично, одно нажатие 3 порождает d, 2 подряд e и т. д. Если же необходимо набрать 2 подряд буквы a, то нажимают клавишу 2, немного ждут и снова нажимают клавишу 2.
В нашем случае, символы с 1-ого по некоторый K 1 -ый должны соответствовать 1-ой клавише, с ( K 1 + 1) -ого по некоторый K 2 -ой — 2-ой клавише и т. д., до K M = N . Конкретные значения K 1 , K 2 , ..., K M - 1 не задаются — их, наоборот, нужно подобрать.
Напишите программу, которая будет искать минимальное необходимое количество нажатий на клавиши для набора указанного сообщения на указанной клавиатуре.
В первой строке содержатся два числа N и M , во второй — N чисел f 1 , f 2 , ..., f N — количества вхождений соответствующего символа. Числа внутри строк разделены одинарными пробелами. 2 ≤ M ≤ 1500 , 3 ≤ N ≤ 2000 , M < N , 1 ≤ f i ≤ 1000 .
Необходимо вывести единственное число — найденное минимальное количество нажатий на клавиши.
Значение 21 достигается при K 1 = 2 , K 2 = 3 (1-й и 2-й символы сопоставить 1-й клавише, 3-й символ 2-й клавише, 4-й и 5-й символы 3-й клавише). Тогда количество нажатий будет
(3 × 1 + 2 × 2) + (5 × 1) + (7 × 1 + 1 × 2) = 21 .
5 3 3 2 5 7 1
21
Ориентированный взвешенный граф задан перечнем дуг (ориентированных рёбер). Отсортировать эти дуги по возрастанию длин, сохранив (в дополнительных полях) номера этих дуг во входных данных.
Первая строка содержит количество вершин N ( 2 ≤ N ≤ 30000 ) и количество дуг (ориентированных рёбер) M ( 1 ≤ M ≤ 123456 ). Каждая из последующих M строк содержит ровно три целых числа u , v и len — начало, конец и длину дуги. 1 ≤ u , v ≤ N , u ≠ v , 1 ≤ len ≤ 10 9 . Гарантированно, что дл и ны всех дуг различны.
Результат должен содержать M строк по четыре целых числа u , v , len , idx в каждой — начало, конец, длину дуг и , и её номер во входных данных (нумерация с единицы). При этом д у ги должны быть отсортированы по возрастанию длин.
3 4 3 2 4 3 1 8 1 2 14 1 3 2
1 3 2 4 3 2 4 1 3 1 8 2 1 2 14 3
Артур принимает участие в телешоу, в котором участникам необходимо выполнять различные интеллектуальные и физические задания, чтобы зарабатывать очки. В одном из таких заданий Артуру необходимо спасти маленького котенка.
Поле для выполнения задания представляет собой прямоугольник размером \(n \times m\) метров, разбитый на квадраты единичной площади. В одном из квадратов исходно находится Артур, в некотором другом квадрате находится котенок. Кроме того, один из квадратов содержит лифт, встав на который вместе с котенком, Артур успешно выполняет задание.
За один шаг Артур может перемещаться на любой квадрат, имеющий общую сторону с тем, на котором он стоит. После этого квадрат, на котором перед этим шагом стоял Артур, исчезает и больше на него вставать нельзя. Таким образом исчезают в том числе и квадрат, на котором исходно стоял Артур, и квадрат с котенком. Цель Артура - дойти до котенка, взять его и затем дойти до лифта. При этом очки за выполнение задания, зависят от числа шагов, которое сделает Артур, поэтому ему необходимо сделать минимальное число шагов.
Выяснив, сколько шагов ему придется сделать, Артур заинтересовался, сколько существует различных способов дойти до котенка, а затем с ним до лифта, сделав в сумме минимальное число шагов. Помогите ему это выяснить. Это число может быть довольно большим, поэтому Артур просит найти его по модулю \(10^9+7\).
Первая строка входного файла содержит два натуральных числа \(n\) и \(m\) - размеры поля для выполнения задания (\(2 \le n, m \le 100\)).
Вторая строка содержит два целых числа \(x_A\) и \(y_A\) - координаты квадрата, на котором исходно находится Артур (\(1 \le x_A \le n\), \(1 \le y_A \le m\)). Третья строка содержит два целых числа \(x_K\) и \(y_K\) - координаты квадрата, на котором сидит котенок (\(1 \le x_K \le n\), \(1 \le y_K \le m\)). Четвертая строка содержит два целых числа \(x_E\) и \(y_E\) - координаты квадрата, на котором находится лифт (\(1 \le x_E \le n\), \(1 \le y_E \le m\)). Эти три квадрата попарно различны.
В единственной строке выходного файла выведите одно число - число способов дойти до котенка и затем до лифта, не наступая на один квадрат два раза, совершив при этом минимальное количество шагов. Число необходимо вывести по модулю \(10^9+7\).
Два способа для поля, приведенного в примере.
3 3 1 1 3 3 2 2
2