Язык программирования

3 014 задачвместе с подтемами
Число у задачи — рейтинг сложности, слово рядом — насколько она трудна по сравнению с другими задачами такого же типа. Шкалы задач с ответом и задач с кодом между собой не сравниваются. Рядом — счётчики попыток: успешные, неуспешные.
Циферблат новых электронных часов, установленных на главном здании офиса фирмы Macrohard, состоит из 4 прямоугольных панелей, каждая из которых состоит из 6 рядов по 5 лампочек в каждом. Первые две панели отображают цифры, из которых складываются часы, а следующие две - минуты. (Если сейчас меньше 10 часов, первая панель отображает 0).

К сожалению, лампочки, установленные на панелях, были произведены компанией Sveta.Net, которая известна своим принципом , вследствие чего на следующий день люди, проходя мимо офиса компании, видели лишь некоторое подобие цифр, поскольку некоторые лампочки больше не горели.

Петя живет в доме, стоящем прямо напротив офиса компании Macrohard. В первый день после установки часов он зарисовал у себя в блокноте, как выглядят все цифры на панелях (панели однотипные, поэтому одна и та же цифра на различных панелях выглядит одинаково). Теперь Петя хочет узнать, можно ли по текущему изображению на часах однозначно определить, сколько сейчас времени. Помогите ему!

Входные данные
Входные данные содержат 6 строк по 20 символов в каждой - текущее изображение на часах. Первый прямоугольник задает первую панель, следующий - вторую, следующий - третью и последний - четвертую.

Выходные данные
Если можно точно определить время, которое сейчас отображается на часах, выведите это время в формате hh:mm. Если время нельзя определить однозначно, выведите AMBIGUITY. Если же в часах точно сломалось еще что-то, например, центральный процессор, который управляет лампочками, выведите ERROR.

Коля любит рисовать картинки из звездочек. Сегодня он решил вывести \(n\) строк, \(k\)-я из которых должна содержать \(k^2\) звездочек.

Но потом Коля понял, что выводить слишком много звездочек плохо. Поэтому он решил, что если в очередной строке надо вывести больше \(100\) звездочек, то он выведет в этой строке только \(100\) звездочек, а затем выведет три точки.

Помогите Коле реализовать его план.

Формат входных данных
На вход подается одно целое число \(n\) (\(1 \le n \le 100\)).

Формат выходных данных
Выведите \(n\) строк в соответствии с планом Коли. Не выводите пробелы.

 

В далеком царстве жил могущественный маг по имени Эльдрик, который был помешан на шахматах. В башне Эльдрика была волшебная шахматная доска, о которой говорили, что она предсказывает будущее королевства. Но был казус. Шахматные фигуры двигались только по белым клеткам, а черные клетки хранили секреты прошлого.

Однажды молодой оруженосец по имени Леон решил узнать все секреты прошлого  и пошел к башне.  Маг Эльдриг дал оруженосцу пергамент, на котором были написаны координаты одной клетки шахматной доски. Эльдриг сказал, что если он сумеет не глядя на доску определить какой цвет у данной клетки шахматной доски, то ему откроются все секреты прошлого!

Леон не был так помешан на шахматах, но все же смог определить цвет клетки правильно! Сможете ли это сделать и вы? 

Шахматная доска выглядит таким образом


Формат входных данных
Программа получает на вход одну строку, в которой записана координата шахматной клетки.
 

Ограничения

  • длина строки == 2
  • 'a' <= первый символ строки <= 'h'
  • '1' <= второй символ строки <= '8'

Формат выходных данных
Выведите слово white, если клетка белого цвета и black - если черного.
В компьютерной игре есть n башен, высота i-й башни равна ai метров. Определим расстояние между двумя башнями с индексами i и j как |i−j|. Разрешается прыгнуть с i-й башни на j-ю башню тогда и только тогда, когда не существует такого индекса 1 <= k <= n, такого, что расстояние от i-й до j-й башни не меньше расстояния от i-й башни до k-й башни, и k-я башня имеет большую высоту, чем j-я. Башня j достижима из башни i если существует последовательность корректных прыжков, которая начинается в i-й башне и заканчивается в j-й. Посчитайте для каждой башни количество достижимых из неё башен, включая её саму.


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

Первая строка входных данных содержит одно целое число n (1 <= <= 500000) - количество башен.

Вторая строка входных данных содержит n чисел a1, a2, ..., an (1 <= a<= 109) - высоты башен.


Выходные данные
Выведите n чисел, i-е из которых должно быть равным количеству башен, достижимых из i-й башни.
 
Примечание

В первом примере с 1-й башни можно прыгнуть на башни 1 и 5. Любая другая башня имеет меньшую высоту, чем башня 1, поэтому туда нельзя прыгнуть (в качестве k можно выбрать 1). Множество достижимых из 1-й башни также состоит из башен 1 и 5. Со второй башни можно прыгнуть на башни 1, 2, и 5, они же являются множеством достижимых. С третьей башни можно прыгнуть на башни 2, 3, 5. Однако, башня 1 также является достижимой, поскольку можно сделать два прыжка: 3→2→1. Таким образом, получается 4 достижимые башни. С 4-й башни можно прыгнуть на башни 4 и 5, они же являются единственными достижимыми. Из 5-й башни достижима только она сама.

Во втором примере из 1-й и из 2-й башни достижимы башни 1,2,3,4,5. Из 3-й башни достижимы башни 3,4,5. Из 4-й и 5-й башни достижимы башни 4,5. Из 6-й башни достижимы башни 4,5,6. Из 7-й башни достижимы башни 4,5,6,7.

 
 
Примеры
Входные данные Выходные данные
1
5
7 6 3 4 10
2 3 4 2 1 
2
7
1 1 1 2 2 1 1
5 5 3 2 2 3 4 

Громозека очень любит валерьянку. На его родной планете Чумароза можно купить за k чумриков (местная валюта) первую упаковку валерьянки, за 2·k чумриков - вторую и так далее (иными словами, за i-ю упаковку надо заплатить i·k чумриков). Громозека хочет купить w упаковок валерьянки.  У него есть n чумриков. Сколько чумриков ему придется взять в кредит в чумарозском банке, чтобы купить w упаковок валерьянки?


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

В первой строке записано три положительных целых числа k, n, w (1  <=  k, w  <=  1000, 0 <= n <= 109), стоимость первой упаковки, изначальное количество чумарозиков у Громозеки и количество упаковок валерьянки, которые он хочет купить.


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

Выведите единственное целое число - количество чумарозиков, которое Громозеке необходимо взять в кредит в банке. Если брать кредит не надо, выведите 0.

 
Примеры
Входные данные Выходные данные
1 3 17 4 13
Напишите функцию vowels_count, которая принимает строку и подсчитывает количество английских гласных в ней.
Английские гласные буквы: a, e, i, o, u, y.

Используя данную функцию, определите две строки:
s1 - строку с самым большим числом гласных букв (если таких строк несколько, взять ту, которая встретится раньше).
s2 - строку с самым маленьким числом согласных букв (если таких строк несколько, взять ту, которая встретится раньше).


Входные данные
В первой строке подается натуральное число n (1 < n <= 10) - количество строк. Далее идут n строк. Каждая строка состоит из английских маленьких букв и пробелов.

Выходные данные
Выведите на экран две строки: сначала строку s1, затем, с новой строки - s2. Наименьшую из данных строк выровняйте по длине с наибольшей, добавив слева строки символы '*'.
 
Примеры
Входные данные Выходные данные
1 4
mama papa
doughter son
brother sister
grandmama grandpa
grandmama grandpa
********mama papa
 
Громозека уважает игры на шахматной доске. На обычной доске размером 8х8 у Громозеки стоит голодная пешка. Голодная пешка каждым ходом съедает какую-либо фигуру соперника (т.е. она может пойти по диагонали вперед на 1 клетку вправо или влево, назад пойти она не может). Громозека, не глядя на доску, научился определять, может ли голодная пешка попасть с одной клетки доски на другую. Превращаться в ферзя голодной пешке нельзя.
Напишите программу, с помощью которой вы могли бы также легко проверить Громозеку.

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

Выходные данные
Выведите слово YES (заглавными буквами), если голодная пешка может попасть из первой клетки во вторую, и NO в противном случае.
Доска имеет размер 8x8, вертикали нумеруются маленькими латинскими буквами от a до h, горизонтали - числами от 1 до 8. Исходная и конечная клетки не совпадают.
 
Примеры
Входные данные Выходные данные
1 a1 b2 YES
2 b2 a1 NO
3 a1 h7 NO
Алиса и Громозека пошли гулять по городу. Заходя в первое кафе, Алиса посмотрела на часы и запомнила время входа. Далее она запоминала только количество минут, которое они с Громозекой тратили между двумя посещенными кафе (от входа в одно кафе, до входа в другое). По окончании прогулки, Алиса решила восстановить хронологию - время входа в очередное кафе.
Напишите программу, которая определит, в какое время Алиса и Громозека заходили в очередное кафе. 

Входные данные
В первой строке задан, момент времени, в который Громозека и Алиса вошли в первое кафе. Формат времени: часы (число от 00 до 23), далее идет двоеточие, затем минуты (число от 00 до 59). Строка времени записана без пробелов.
Во второй строке записано натуральное число N (2 <= N <= 1000) - количество посещенных кафе (включая кафе из которого они вышли в начальный момент времени и последнее кафе). В третьей строке записано N-1 число: первое показывает время в минутах от входа в первое кафе до входа во второе, второе - время от входа во второе кафе до входа в третье и т.д. Каждое из этих чисел натуральное и не превышает 1000.

Выходные данные
Выведите для каждого кафе время входа Алисы и Громозеки. Формат времени должен быть такой же, как и во входных данных.
 
Примеры
Входные данные Выходные данные
1 07:00
4
10 5 3
07:00
07:10
07:15
07:18
Черный рейнджер нашел в жерле заброшенного вулкана n прямоугольных листов металла разного размера, i-й лист имеет размер ai на bi метров.
Зордон поручил построить Черному рейнджеру тюрьму для злобного генерала Зедда, и эта находка оказалась для него просто подарком судьбы. Тюрьма должна иметь вид прямоугольного параллелепипеда каждая грань которого представляет собой цельный лист металла. Так что рейнджер собирается взять 6 из найденных им листов металла, сложить из них параллелепипед, и показать его Зордону. Листы нельзя гнуть или разрезать, листы, из которых будет сложена тюрьма не должны выступать за её края.
Поскольку чем больше тюрьма, чем надежнее, параллелепипед должен иметь максимальный возможный объем. Помогите герою выбрать 6 листов прямоугольников так, чтобы собрать из них самую большую тюрьму.
Листы можно поворачивать, таким образом, например, листы 4 на 7 метров и 7 на 4 метра считаются одинаковыми.

Формат входных данных
В первой строке дано одно число n — количество листов металла у Черного Рейнджера (6 ≤ n ≤ 200 000).
В следующих n строках даны пары чисел ai; bi — размеры i-го куска металла (1 ≤ ai; bi ≤ 106).

Формат выходных данных
Выведите одно целое число — максимальный объем прямоугольного параллелепипеда, который можно собрать из этих кусков металла.
Если из данных листов невозможно собрать прямоугольный параллелепипед, выведите -1.
Примеры
Входные данные Выходные данные
1 6
3 6
6 9
9 3
6 3
3 9
9 6
162
2 6
1 1
1 1
1 1
1 1
1 1
1 1
1
3 6
1 2
2 3
3 4
4 5
5 6
6 1
-1
Громозека любит числовые печеньки. Среди всех числовых печенек Громозека ест только такие, на которых сумма цифр записанного числа в десятичной системе счисления является делителем самого числа. Вам дается число, записанное на печеньке. Определите будет ли ее есть Громозека или нет.

Входные данные
На вход подается целое число N (1<=N<=109).

Выходные данные
Выведите ответ Yes, если Громозека будет есть такую печеньку, No - если не будет.
 

 

Примеры
Входные данные Выходные данные
1 12 Yes
2 101 No

 

В уме Громозеки всегда есть целое число. Первоначально в уме Громозеки целое число равно 0. Теперь Громозека собирается съесть четыре печеньки, на каждой из которых написан символи либо + либо -. Когда он ест печеньку с символом +, целое число в его уме увеличивается на 1; когда он ест печеньку с символом -, целое число в его уме уменьшается на 1. Печеньки, которые Громозека собирается съесть, даются вам в виде строки S, i-й символ в S - это i-я печенька, которую он ест. Найдите целое число в уме Громозеки после того, как он съест все печеньки.

Входные данные
На вход подается строка из 4-х символов, каждый из которых равен или -.

Выходные данные
Выведите целое число в уме Громозеки после того, как он съест все печеньки.
 

 

Примеры
Входные данные Выходные данные
1
+-++
2
2
-+--
-2
3
----
-4

 

Перед празднованием Дня программиста офис IT компании украсили последовательностью чисел длины N, a = {a1, a2, a3, ..., aN}. Багз Хантер, сотрудник отдела тестирования, хотел бы поиграть с этой последовательностью. В частности, он хотел бы повторить следующую операцию как можно больше раз.
Для каждого i, удовлетворяющего 1<=i<=N, выполните одно из следующих действий: «разделить ai на 2» и «умножить ai на 3». Нельзя выполнять «умножить ai на 3» сразу для каждого i в течении одной операции, значение ai после любого действия должно быть целым числом. 
Одну операцию Багз Хантер делает за 1 секунду независимо от количества чисел в последовательности. Определите максимум через сколько секунд Багз Хантер вернется к своей работе?

Входные данные
В первой строке записано целое число N (1<=N<=10000). Во второй строке записаны N целых чисел ai (1<=ai<=109).

Выходные данные
Выведите одно число -  максимальное количество секунд, через которое Багз Хантер вернется к своей работе.
 

 

Примеры
Входные данные Выходные данные Пояснение
1 3
5 2 4
3 Последовательность изначально 5,2,4.
Три операции можно выполнить следующим образом:
- сначала умножьте a1 на 3, умножьте a2 на 3 и разделите a3 на 2. Теперь последовательность 15,6,2;
- затем умножьте a1 на 3, разделите a2 на 2 и умножьте a3 на 3. Теперь последовательность 45,3,6;
- наконец, умножьте a1 на 3, умножьте a2 на 3 и разделите a3 на 2. Теперь последовательность 135,9,3.
Далее, с каждым числом можно выполнить только умножение на 3, но это действие недопустимо сразу для всех чисел ai.
Поэтому ответ 3.
2 4
631 577 243 199
0  
3 10
2184 2126 1721 1800 1024 2528 3360 1945 1280 1776
39  

 

N учащихся класса, удобно пронумеровали числами от 1 до N. На линейке 1 сентября они стояли в ряд, но теперь не уверены в том, в каком порядке они стояли. Однако каждый запомнил следующий факт: абсолютную разницу между количеством учащихся, стоявших слева от этого человека, и количеством учащихся, которые стояли справа от этого человека. Согласно их отчетам, разница для человека i равна Ai . На основании этих отчетов, найдите количество возможных расстановок, в которых они стояли. Поскольку ответ может быть очень большим, выведите его по модулю \(10^9+7\). Обратите внимание, что отчеты могут быть неправильными и, следовательно, не может быть согласованного порядка. В таком случае выведите 0.

Входные данные
В первой строке задается число (\(1<=N<=10^5\)). Во второй строке N чисел Ai (\(0<=A_i<=N-1\)).

Выходные данные
Выведите количество возможных расстановок по модулю \(10^9+7\).
 

 

Примеры
Входные данные Выходные данные Пояснение
1 5
2 4 4 0 2
4 Возможны 4 расстановки учащихся, а именно:
2 ,1 ,4 ,5 ,3
2 ,5 ,4 ,1 ,3
3 ,1 ,4 ,5 ,2
3 ,5 ,4 ,1 ,2
2 7
6 4 0 2 4 0 2
0 Любая расстановка не совместима с отчетами. Поэтому ответ 0.
3 8
7 5 1 1 7 3 5 3
16  

 

Учёный Иван Иванович изучает перевёрнутые родословные. Перевёрнутая родословная представляет собой набор людей, про каждого из которых известны либо оба его родителя, либо не известен ни один родитель. Кроме того, известно, что у всех людей из родословной есть ровно один
ребёнок, кроме одного человека, у которого детей вовсе нет. Поэтому, если пронумеровать людей целыми числами от 1 до n, то можно обозначить за si номер ребёнка человека с номером i и сказать, что si = 0 в случае, если у человека с номером i детей нет.
Будем считать, что человек a входит в родословную человека b, если либо a = b, либо если у b известны родители, и a входит в родословную одного из родителей b.

Будем считать, что произошёл перекос родословной с участием некоторого человека, если известны оба его родителя и количество людей в родословной одного из его родителей хотя бы вдвое больше, чем количество людей в родословной второго родителя.
Иван Иванович посчитал количество перекосов родословной и получил число k, но, конечно же, он делал это вручную и мог ошибиться. Помогите проверить Ивану Ивановичу его вычисления: по числам n и k скажите, существует ли родословная из n людей с k перекосами, и если существует, то приведите пример подобной родословной.

Формат входных данных
В единственной строке заданы два целых числа n и k (1 ≤ n ≤ 100 000, 0 ≤ k ≤ n) — количество людей в родословной и количество перекосов в ней.

Формат выходных данных
В первой строке выведите «YES» (без кавычек), если существует родословная с n людьми и k перекосами, и «NO» (без кавычек) в противном случае.
Если требуемая родословная существует, то во второй строке выведите n целых чисел s1, s2, . . . , sn (0 ≤ si ≤ n), задающих номера детей каждого из n человек в родословной. Если искомых родословных несколько, выведите любую.
Примеры
Входные данные Выходные данные
1 3 0 YES
0 1 1
2 5 1 YES
0 1 1 3 3
3 3 2 NO

Замечание

В первом примере подойдет единственная родословная, которую можно составить из трёх человек (человек и два его родителя).

Во втором примере подойдет следующая родословная:


В этом случае в родословную человека 1 входят пять человек (люди 1, 2, 3, 4, 5), в родословную человека 2 входит один человек (только 2), в родословную человека 3 входят три человека (3, 4, 5), в родословную человека 4 входит один человек (только 4) и в родословную человека 5 входит один
человек (только 5). В этом случае происходит перекос родословной в человеке 1.
В третьем примере можно показать, что не существует родословной из трёх людей с двумя перекосами.
 
На выборах в Государственную думу в избирательные бюллетени внесено N партий. Электронный сканер для считывания информации с бюллетеней передает информацию о каждом бюллетене в следующем формате: если в соответствующей клетке бюллетеня стоит пометка, то сканер передает + (плюс), в противном случае он передает - (минус). Таким образом, он передает последовательность из N символов - плюсов и минусов.

Бюллетень считается действительным, если пометка есть ровно в одной клетке. Недействительные бюллетени в подсчете результатов выборов не участвуют.

Партия проходит в Государственную Думу, только если она набирает не менее 7% от общего числа действительных бюллетеней.

Требуется вывести номера (в порядке их перечисления в бюллетене) всех партий, которые проходят в Государственную Думу.

Входные данные
В первой строке входных данных содержатся два числа, разделенные пробелом: N - количество партий и M - количество бюллетеней. Оба числа натуральные, N ≤ 200, M ≤ 100 000.

В следующих M строках записана информация, полученная из бюллетеней. Каждая строка - последовательность из N символов + или - (без пробелов).

Гарантируется, что есть хотя бы один действительный бюллетень.

Выходные данные
Выведите через пробел номера партий, прошедших в Думу, в порядке возрастания. Если ни одна из партий не проходит в Думу,  выводить ничего не нужно.
 
Примеры
Входные данные Выходные данные
1 3 4
+--
+--
-+-
+-+
1 2
2 1 5
+
-
-
-
-
1
Будильник в сотовом телефоне можно настроить так, чтобы он звонил каждый день в одно и то же время, либо в указанное время в определенный день недели. Независимо можно настроить несколько будильников.

По информации о будильниках и текущему времени и дню недели определите, когда прозвонит очередной будильник.

Входные данные
В первой строке вводятся три числа, задающие текущее время: день недели (от 1 до 7), часы и минуты.

Во второй строке вводится одно натуральное число N, не превосходящее 100 – количество будильников.

В следующих N строках вводятся описания N будильников. Описание каждого будильника состоит из трех чисел: дня недели (число от 1 до 7 для понедельника,  …, воскресенья, соответственно, 0 – если будильник должен звонить каждый день), часов (от 0 до 23), минут (от 0 до 59).


Выходные данные
Выведите  через пробел три числа, задающие день недели, часы и минуты, когда прозвонит ближайший будильник.
 
Примеры
Входные данные Выходные данные Пояснение
1 2 10 20
2
1 23 15
0 10 10
3 10 10  
2 7 1 1
3
7 0 59
7 23 59
7 1 1
7 1 1 Во втором примере третий будильник будет звенеть в начальный момент времени.
Вводится натуральное число. Требуется разделить запятыми тройки его цифр (считая справа).

Входные данные
Вводится одно натуральное число, не превышающее 10100.

Выходные данные
Вывести то же число, разделяя тройки цифр запятыми.

Примеры
Входные данные Выходные данные
1 1000 1,000
2 12345678 12,345,678
3 999 999
Напишите процедуру с параметром n, которая выводит ёлочку с кроной высотой n
Основная программа должна содержать ввод значения переменной n и вызов процедуры

Примеры
Входные данные Выходные данные
1 5
    o
   ooo
  ooooo
 ooooooo
ooooooooo
На вход подается число N - количество элементов массива. 
Далее идут два массива из N целых чисел каждый: элементы первого массива идут по одному в каждой строке, элементы второго массива - записаны все в одной строке через пробел.
Заполните два массива и выведите их элементы через пробел в одну строку: первый массив в первой строке, второй массив во второй строке.

 
Примеры
Входные данные Выходные данные
1 3
1
2
3
4 5 6
1 2 3
4 5 6
Поделиться
Класснуть