Информатика

15 724 задачивместе с подтемами
Число у задачи — рейтинг сложности, слово рядом — насколько она трудна по сравнению с другими задачами такого же типа. Шкалы задач с ответом и задач с кодом между собой не сравниваются. Рядом — счётчики попыток: успешные, неуспешные.
На планете в звездной системе Альфа Кентавра неделя состоит из A дней, а год - из B дней. Годы нумеруются последовательными натуральными числами: 1, 2, 3, ... Кроме того, годы с номерами C1, C2, ..., CN являются високосными и состоят из (B+1) дней. В году дни с номерами D1, D2, ..., DM являются праздничными. Если праздник попадает на (B+1)-й день года, то он отмечается только в високосные годы. Первый день первого года является первым днем недели.

Один из жителей планеты решил устроиться на новую работу. В соответствии с заключенным трудовым договором он будет числиться на данной работе в течение E дней, начиная с первого дня 1-го года. По договору он имеет право выбрать один день недели (с 1 по A), который будет для него выходным. Праздничные дни также считаются нерабочими. Житель хочет выбрать себе выходной день таким образом, чтобы за период действия договора у него было максимальное количество нерабочих дней.

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

Входные данные
В первой строке входного файла через пробел записаны числа A и B - количество дней в неделе и в невисокосном году соответственно (1 ≤ A ≤ 2500, 1 ≤ B ≤ 10000). Во второй строке записано число N - количество високосных лет, и в третьей - номера C1, C2, ..., CN високосных лет в возрастающем порядке (0 ≤ N ≤ 5000, 1 ≤ C1 < C2 < ... < CN ≤ 107). В следующей строке число M - количество праздничных дней в году, и на новой строке - D1, D2, ..., DM в возрастающем порядке (1 ≤ D1 < D2 < ... < DM ≤ B+1). В последней строке записано число E (1 ≤ E ≤ 109). Известно, что житель заключил контракт не более чем на 107 лет.

Выходные данные
В выходной файл выведите через пробел два числа - номер дня недели, который выгоднее всего сделать выходным, и соответствующее количество нерабочих дней за период действия договора. Если ответов несколько, то выведите любой из них.
В пространстве с прямоугольной системой координат находятся два куба. Про них известно следующее:
  • сторона каждого куба равна 2, 
  • центр (т.е. центр симметрии) каждого куба совпадает с началом данной системы координат,
  • координаты вершин >первого куба A1A2A3A4A5A6A7A8 следующие: A1(1, 1, 1), A2(1, –1, 1), A3(–1, –1, 1), A4(–1, 1, 1), A5(1, 1, –1), A6(1, –1, –1), A7(–1, –1, –1), A8(–1, 1, –1), 
  • вершины второго куба B1B2B3B4B5B6B7B8 пронумерованы так, что путем поворота кубы можно совместить, и при этом совместятся соответствующие их вершины (A1 и B1, A2 и B2, … , A8 и B8)
  • координаты вершин второго куба даны во входном файле.

Требуется найти объем пересечения (т.е. общей части) этих кубов.

Входные данные
Во входных данных записаны 8 троек действительных чисел – координаты вершин второго куба B1B2B3B4B5B6B7B8.

Выходные данные
В выходной файл выведите одно число – искомый объем пересечения кубов. Ответ не должен отличаться от верного более чем на 0.00001.
В государстве алхимиков есть N населённых пунктов, пронумерованных числами от 1 до N, и M дорог. Населённые пункты бывают двух типов: деревни и города. Кроме того, в государстве есть одна столица (она может располагаться как в городе, так и в деревне). Каждая дорога соединяет два населённых пункта, и для проезда по ней требуется Ti минут. В столице было решено провести 1-ю государственную командную олимпиаду по алхимии. Для этого во все города из столицы были отправлены гонцы (по одному гонцу на город) с информацией про олимпиаду.

Напишите программу, которая посчитает, в каком порядке и через какое время каждый из гонцов доберётся до своего города. Считается, что гонец во время пути не спит и нигде не задерживается.

Входные данные
Во входных данных сначала записаны 3 числа N, M, K — количество населенных пунктов, количество дорог и количество городов (2≤N≤1000, 1≤M≤10000, 1≤K≤N). Далее записан номер столицы C (1≤C≤N). Следующие K чисел задают номера городов. Далее следуют M троек чисел Si, Ei, Ti, описывающих дороги: Si и Ei — номера населенных пунктов, которые соединяет данная дорога, а Ti — время для проезда по ней (1≤Ti≤100).

Гарантируется, что до каждого города из столицы можно добраться по дорогам (возможно, через другие населенные пункты).

Выходные данные
Выведите K пар чисел: для каждого города должен быть выведен его номер и минимальное время, когда гонец может в нем оказаться (время измеряется в минутах с того момента, как гонцы выехали из столицы). Пары должны быть упорядочены по времени прибытия гонца.
Дана строка S, состоящая из N символов. Определим функцию A(i) от первых i символов этой сроки следующим образом:

A(i) = максимально возможному k, что равны следующие строки:

S[1]+S[2]+S[3]+…+S[k]

S[i]+S[i–1]+S[i–2]+…+S[i–k+1]

где S[i] – i-ый символ строки S, а знак + означает, что символы записываются в строчку непосредственно друг за другом.

Напишите программу, которая вычислит значения функции A для заданной строчки для всех возможных значений i от 1 до N.

Входные данные
В первой строке записано одно число N. 1 ≤ N ≤ 200000. Во второй строке записана строка длиной N символов, состоящая только из больших и/или маленьких латинских букв.

Выходные данные
Выведите N чисел — значения функции A(1), A(2), … A(N).
Напишите программу, которая будет искать все целые X, удовлетворяющие уравнению

AX3 + BX2 + CX + D = 0,

где A, B, C, D — данные целые числа.

Входные данные
Во входном файле записаны четыре целых числа: A, B, C, D. Все числа по модулю не превышают 2<=109.

Выходные данные
В выходной файл выведите сначала количество решений этого уравнения в целых числах, а затем сами корни в возрастающем порядке. Если уравнение имеет бесконечно много корней, выведите в выходной файл одно число –1 (минус один).
Оргкомитет и жюри Московской олимпиады проводят очередные учебно-тренировочные сборы. Победители туров на сборах получают в качестве приза мороженое. Поскольку мороженое имеет тенденцию таять, то оно должно храниться в холодильнике. Холодильник, имеющийся в 179 школе слишком мал для хранения всего запаса мороженого. Поэтому организаторы решили заказать специальный супер-пупер-большой холодильник. Новый холодильник должен быть параллелепипедом A × B × C и хранить ровно N кубических баночек мороженого размером 1 × 1 × 1. Для уменьшения потерь холода, общая площадь поверхности холодильника должна быть как можно меньше.

Например, если размер холодильника должен быть 12, возможными вариантами являются:

 
 
Размеры баночек Площадь поверхности
3 × 2 × 2 32
4 × 3 × 1 38
6 × 2 × 1 40
12 × 1 × 1 50

Лучшим вариантом является 3 × 2 × 2.

Помогите организаторам сборов выбрать оптимальную форму холодильника.

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

Входной файл содержит одно число N (1 ≤ N ≤ 106).

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

Выведите три числа A, B и C — оптимальные длины сторон холодильника. Если решений несколько — выведите любое из них.
В игру крестики-крестики играют на поле размером 1 × N. Два игрока ходят по очереди. На каждом ходу игрок выбирает одну свободную ячейку и ставит там крестик. Если после его хода оказывается три крестика подряд, то он побеждает.

По известному N вам необходимо определить какой игрок победит при оптимальной игре обоих игроков.

Входные данные
Входной файл содержит одно число N (3 ≤ N ≤ 2000).

Выходные данные
Выведите 1, если побеждает первый игрок и 2, если побеждает второй игрок.
Алфавитно-частотный словарь - это частотный словарь, в котором слова с указанием их частоты (встречаемости) расположены по алфавиту.
Постройте словарь, отсортированный по частоте слов, в котором слова расположены порядке уменьшения их частоты встречаемости, справа от каждого слова должно быть указано сколько раз оно встречается в тексте. Если количество слов одинаково, сортировка идет по словам в лексикографическом порядке.  Признаком окончания текста является "END!". 

Входные данные
На вход подаются строки текста. Последняя строка содержит одно единственное слово "END!" и является признаком окончания текста.

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

 
Примеры
Входные данные Выходные данные
1 один два
три один
два
END!
два 2
один 2
три 1
✓ 593✗ 1 304500лёгкаяВойти и решать
С клавиатуры вводятся целые положительные числа. Напишите программу, которая находит сумму введенных чисел. Числа вводятся до тех пора, пока не будет введено число 0.

Выведите на экран ответ - сумму введенных чисел.
✓ 356✗ 679300лёгкаяВойти и решать
Напишите программу, которая:
  1. Принимает от пользователя (с клавиатуры) целое число и сохраняет его в переменной num.
  2. Выводит все положительные целые числа от 1 до num (num включительно). Каждое число необходимо вывести на отдельной строке.
✓ 546✗ 1 763200лёгкаяВойти и решать

На проверку сдается код, содержащий только описание классов!

Объявите базовый класс Aircraft (самолет), объекты которого создаются командой:

air = Aircraft(model, mass, speed, top)

где __model - модель самолета (строка, private); _mass - подъемная масса самолета (любое положительное число, protected ); _speed - максимальная скорость (любое положительное число, protected); _top - максимальная высота полета (любое положительное число, protected).

В каждом объекте класса Aircraft должны создаваться локальные атрибуты с именами: __model, _mass, _speed, _top и соответствующими значениями. Если передаваемые аргументы не соответствуют указанным критериям (строка, любое положительное число), то генерируется исключение командой:

raise TypeError('неверный тип аргумента')

Изменение и считывание значений атрибута __model должна осуществляться по имени (obj.model = ..., print(obj.model)

Далее, в программе объявите следующие дочерние классы:

PassengerAircraft - пассажирский самолет;
WarPlane - военный самолет.

Объекты этих классов создаются командами:

pa = PassengerAircraft(model, mass, speed, top, chairs)  
# chairs - число пассажирских мест (целое положительное число)

wp = WarPlane(model, mass, speed, top, weapons) 
# weapons - вооружение (словарь); ключи - название оружия, значение - количество

В каждом объекте классов PassengerAircraft и WarPlane должны формироваться локальные атрибуты с именами _chairs (protected)  и _weapons (protected) соответственно. Инициализация остальных атрибутов должна выполняться через инициализатор базового класса.

В инициализаторах классов PassengerAircraft и WarPlane проверять корректность передаваемых аргументов chairs и weapons. Если тип данных не совпадает, то генерировать исключение командой:

raise TypeError('неверный тип аргумента')

Пример создания объектов

pa1 = PassengerAircraft('МС-21', 1250, 8000, 12000.5, 140)
pa2 = PassengerAircraft('SuperJet', 1145, 8640, 11034, 80)
wp1 = WarPlane('Миг-35', 7034, 25000, 2000, {"ракета": 4, "бомба": 10})
wp2 = WarPlane('Су-35', 7034, 34000, 2400, {"ракета": 4, "бомба": 7})

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

Мобильный телефон Василия поддерживает только транслит, поэтому он передает сообщения вида "N bochek" . Например, "3 bochki" или "1 bochka" .

Напишите программу, которая выбирает правильное слово (из "bochka" , "bochek" , "bochki" ) в зависимости от N.


Формат входных данных

Одно число N (0 ≤ N ≤ 1000).


Формат выходных данных

Фраза на транслите (см. примеры).


 

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

Формат входных данных

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

Формат выходных данных

Нужно вывести название времени года (на английском языке), соответствующее введённому номеру месяца ('winter' – зима, 'spring' – весна, 'summer' – лето, 'autumn' – осень). Если введён неверный номер месяца, программы должна вывести слово 'NO'.

Подземный бункер состоит из \(n\) комнат, соединённых \(n - 1\) коридорами. Каждый коридор соединяет две различные комнаты и имеет определённую длину. Бункер устроен таким образом, что из любой комнаты \(i\) можно дойти в любую другую комнату \(j\). Заметим, что существует единственный такой путь, не проходящий по одному и тому же коридору дважды. Сумма длин коридоров, составляющих этот путь, называется расстоянием между комнатами \(i\) и \(j\) и обозначается \(\rho(i, j)\).

Каждая комната бункера оборудована звуковой сигнализацией, состоящей из сирены и датчика звука, который её включает. Сирена, включённая в комнате \(i\), активирует датчик звука в каждой комнате, расстояние до которой не превосходит расстояние \(d_i\), определяемое мощностью этой сирены. Другими словами, включение сирены в комнате \(i\) автоматически включает сирену во всех комнатах \(j\), таких что \(\rho(i, j) \leq d_i\). Эта сирена, в свою очередь, может вызвать автоматическое включение других сирен и так далее.

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

Требуется написать программу, которая определяет минимальное количество сирен в наборе, удовлетворяющем правилам безопасности.

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

Первая строка входных данных содержит единственное число \(n\) — количество комнат.

Вторая строка содержит последовательность из \(n\) целых чисел \(d_i\), \(i\)-е из них равно максимальному расстоянию, на котором расположенная в комнате \(i\) сирена активирует датчики (\(0 \leq d_i \leq 10^9\)).

Последующие \(n - 1\) строк описывают коридоры бункера. В \(i\)-й из них находятся три целых числа: \(u_i\), \(v_i\), \(l_i\), где \(u_i\), \(v_i\) — номера различных комнат, соединённых коридором \(i\), а \(l_i\) — длина этого коридора (\(1 \leq u_i, v_i \leq n\); \(1 \leq l_i \leq 10^9\)).

Выходные данные
Выходные данные должны состоять из единственного числа — минимального количества сирен, которые необходимо включить вручную.

Замечание
В тесте из примера сирена в комнате 4 включает сирену в комнате 5, которая, в свою очередь, включает сирены в комнатах 6 и 7. Сирена в комнате 2 включает сирену в комнате 3. Сирена в комнате 8 включает сирены в комнатах 1, 9 и 10.

Улицу Подводный канал освещают \(n\) фонарей, пронумерованных вдоль улицы от 1 до \(n\). Один или несколько подряд стоящих фонарей назовём сегментом. Таким образом, общее количество сегментов \(\frac{n(n+1)}{2}\). Сегмент считается исправным, если лампочки во всех фонарях этого сегмента исправны.

С фонарями регулярно происходят события одного из двух типов:

в каком-то сегменте из-за скачков напряжения все лампочки одновременно перегорают;

Архиэнерго выбирает некоторый сегмент и посылает ремонтников, чтобы заменить на нем все перегоревшие лампочки на исправные.

После каждого события мэрия города требует от Архиэнерго предоставить отчёт о количестве исправных сегментов. Для улучшения показателей работы ремонтники включают в отчёт все сегменты, которые исправны сейчас или были исправны когда-либо ранее.

Требуется написать программу, определяющую количество сегментов после каждого события, которые исправны в этот момент или были исправны когда-либо до этого события.

Входные данные
В первой строке входных данных содержатся два числа \(n\) и \(q\) — количество фонарей и количество произошедших событий. Следующая строка входных данных состоит из \(n\) символов 0 и 1, описывающих начальное состояние фонарей, где 1 обозначает фонарь с исправной лампочкой, а 0 — с перегоревшей.

В каждой из последующих \(q\) строк содержатся описания событий в виде трёх чисел \(l_i, r_i\) и \(c_i\), которые означают, что после этого события все лампочки в фонарях с номерами \(l_i, l_i+1, \ldots, r_i\):

  • перегорают при \(c_i = 0\)
  • становятся исправными при \(c_i = 1\).

В описаниях всех событий \(1 \le l_i \le r_i \le n\), а \(c_i\) принимает значение \(0\) или \(1\).

Выходные данные
В первой строке выходных данных выведите единственное число "— количество исправных сегментов в начальном состоянии. Затем по одному в строке выведите \(q\) чисел: для каждого из произошедших событий выведите количество сегментов, указываемых в отчёте после этого события.

Подводная лодка легла на грунт на мелководье. Для её обнаружения используются данные спутника, который с высокой точностью измеряет отклонение высоты поверхности воды от среднего уровня моря. Снимок, получаемый со спутника, представляет собой массив из \(h\) строк по \(w\) элементов в каждой строке.

Введём на снимке систему координат с осью абсцисс, направленной вдоль строк снимка слева направо, и осью ординат, направленной вдоль столбцов снимка снизу вверх. Потенциальное изображение подводной лодки представляет собой любое множество элементов массива, состоящее из следующих частей:

  • <<корпус>> — полоса из элементов с координатами от \((x_1, y_1)\) до \((x_2, y_1)\), где \(x_1 < x_2\);
  • <<рубка>> — полоса из элементов с координатами от \((x_3, y_1)\) до \((x_3, y_2)\), где \(x_1 \leq x_3 < x_2\); \(y_1 \leq y_2\);
  • <<хвост>> — полоса из элементов с координатами от \((x_4, y_3)\) до \((x_4, y_4)\), где \(x_3 < x_4 \leq x_2\); \(y_3 \leq y_1 \leq y_4\).

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

Требуется написать программу, которая находит на снимке изображение подводной лодки и выводит сумму его элементов.

Входные данные
Для сжатия передаваемых со спутника данных каждый элемент снимка кодируется строчной буквой английского алфавита. Первая строка входных данных содержит число \(k\) — количество использованных для кодирования букв (\(k \le 26\)). Вторая строка входных данных содержит \(k\) целых чисел \(c_i\) — значения отклонений соответствующих каждому кодовому символу по порядку букв в английском алфавите от 1 до \(k\)-й.

Третья строка входных данных содержит числа \(h\) и \(w\) — размеры снимка. Последующие \(h\) строк содержат по \(w\) символов — кодовые значения элементов снимка.

Выходные данные
Выходные данные должны содержать единственное целое число — сумму элементов массива, соответствющих изображению подводной лодки.

 

Примеры
 
Входные данные Выходные данные Изображение
1 2
-10 1
6 11
aaaaaaaaaaa
aaabaaaaaaa
aaabaaaabaa
abbbbbbbbba
aaaaaaaabaa
aaaaaaaaaaa
13
...........
...b.......
...b....b..
.bbbbbbbbb.
........b..
...........

			 
2 3
-4 -3 4
5 5
bbabc
ccaac
accba
baccb
baaaa
16
.....
.c...
.cc..
..c..
.....

			 
3 3
-2 4 0
5 5
abccb
cccac
cbcba
cccbb
accba
24
.b...
.c...
.b.b.
cccbb
...b.

			 
4 4
-1 -5 -3 0
5 5
bbabc
ccaac
acdba
baccb
baaaa
-2
.....
..aa.
.....
.....
.....

			 


Пояснение

Для примера ниже приведены несколько потенциальных изображений подводной лодки.

Ниже приведены несколько множеств элементов снимка, которые не являются потенциальными изображениями подводной лодки:

Даны три действительных числа: a, b, c. Проверьте, выполняется ли равенство a + b = c . Если равенство выполняется, выведите YES, если не выполняется, выведите NO.

Входные данные
Числа a, b, c –  действительные, положительные, не превосходят 10 и заданы не более, чем с 7 знаками после точки.

Выходные данные
Выведите результат сравнения.
Поле для игры в новую игру "Гексагон" разбито  на шестиугольники (см. рисунок). Игрок, стартуя из некоторого начального шестиугольника, сделал несколько ходов. Каждый ход заключается в премещении фишки в соседний шестиугольник (имеющий с тем, где находилась фишка до начала хода, общую сторону) — тем самым, ход делается вдоль одного из направлений X, Y или Z (см. рисунок). Игрок записал все свои ходы, причем если фишка двигалась вдоль какого-либо направления несколько раз подряд, то в записи это обозначается указанием направления и количества ходов, которые были сделаны.

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



Входные данные
В первой строке записано число N — количество строк в записи перемещений фишки (1 ≤ N ≤ 100). Далее идет N строк с записью ходов: в каждой строке записана сначала большая буква X, Y или Z, задающая направление, затем пробел, и число, задающее количество ходов в данном направлении (число может быть и отрицательным, если игрок перемещал фишку параллельно оси, но в направлении, противоположном направлению оси). Все числа по модулю не превышают 200.

Выходные данные
Выведите описание кратчайшего пути обратно в начальную клетку в том же формате, в каком описание задано во входных данных (за исключением ограничений). Все числа, определяющие количество ходов в каком-либо направлении, должны быть ненулевыми.
Примеры
Входные данные Выходные данные
1
4
Z -2
Y 3
Z 3
X -1
4
Z -1
Y -1
Z -1
Y -1
В стране Олимпиадии снова выборы.

Страна состоит из маленьких графств. Графства объединяются в конфедерации. Каждая конфедерация раз в год выбирает себе покровителя – одного из 200 жрецов. Этот ритуал называется Великими Перевыборами Жрецов и выглядит так: конфедерации одновременно подают заявления (одно от конфедерации) в Совет Жрецов о том, кого они хотели бы видеть своим покровителем (если заявление не подано, то считают, что конфедерация хочет оставить себе того же покровителя). После этого все заявки удовлетворяются. Если несколько конфедераций выбирают одного и того же Жреца, то они навсегда объединяются в одну. Таким образом, каждый Жрец всегда является покровителем не более чем одной конфедерации. Требуется написать программу, позволяющую Совету Жрецов выяснить номер Жреца-покровителя каждого графства после Великих Перевыборов. В Совете все графства занумерованы (начиная с 1). Все Жрецы занумерованы числами от 1 до 200 (некоторые из них сейчас могут не быть ничьими покровителями).

Входные данные
В первой строке записано число N – количество графств в стране (1 ≤ N ≤ 5000) – и далее для каждого графства записан номер Жреца-покровителя конфедерации, в которую оно входит (графства считаются по порядку их номеров). Затем указаны заявления от конфедераций. Сначала записано число M – количество поданных заявлений, а затем M пар чисел: первое число – номер текущего Жреца-покровителя, второе – номер желаемого Жреца-покровителя.

Все числа во входном файле разделяются пробелами и (или) символами перевода строки.

Выходные данные
Вывести для каждого графства одно число – номер его Жреца-покровителя после Великих Перевыборов. Сначала – для первого графства, затем – для второго и т.д.
Старинные часы бьют каждые полчаса. Причем в начале каждого часа они бьют столько раз, сколько сейчас часов (по 1 разу – в час ночи и в час дня, по 2 раза – в два часа ночи в два часа дня и т.д., в полночь и в полдень они бьют, соответственно, по 12 раз). И еще 1 раз они бьют в середине каждого часа.

Дан промежуток времени (известно, что прошло строго меньше 24 часов). Напишите программу, определяющую, сколько ударов сделали часы за это время.

Входные данные
В первой строке записан начальный момент времени, во второй строке — конечный. Моменты времени задаются двумя целыми числами, разделяющимися пробелом. Первое число задает часы (от 0 до 23), второе — минуты (от 1 до 59, при этом оно не равно 30).

Выходные данные
Выведите одно число — сколько ударов сделали часы за этот отрезок времени.
Поделиться
Класснуть