Темы --> Информатика --> Язык программирования
    Процедуры и функции(96 задач)
    Массивы(232 задач)
    Типы данных(356 задач)
    Циклы(177 задач)
    Условный оператор (if)(164 задач)
    Python(260 задач)
    Standard Template Library(2 задач)
---> 145 задач <---
Страница: << 19 20 21 22 23 24 25 >> Отображать по:
ограничение по времени на тест
1.0 second;
ограничение по памяти на тест
256 megabytes

... но нужен ли на самом деле кому-нибудь 6\(1\over7\)-пунктовый шрифт, который на три четверти — шрифт Baskerville, и на четверть — Helvetica?

Дональд Э. Кнут. Идея Мета-фонта1

Маленькая девочка Оля добралась до полки, на которой стоят флаконы с мамиными любимыми духами, и начала заниматься своим любимым занятием — переливанием жидкостей из одного флакона в другой. Когда наконец мама застала её за этим занятием, прекрасная коллекция духов была уже безнадёжно утрачена.

К счастью, Оля — аккуратная девочка, поэтому все свои действия она записывала на бумажку. Помогите ей успокоить маму: определите, каков состав духов в первом (мамином любимом) флаконе, чтобы мама смогла придумать этой смеси новое название и рассказывать всем, какие прекрасные духи она смогла сделать вместе с дочерью.

Считайте, что Оля не пролила ни одной капли, а также что она тщательно встряхивала флаконы после каждого переливания. Учтите, что в маминых флаконах порой не видно, есть ли там жидкость, и потому Оля иногда могла пытаться переливать духи из пустого флакона (в результате, естественно, ничего не переливалось). Вы можете также считать, что после каждого переливания в каждом флаконе каждый тип духов либо полностью отсутствует, либо содержится в объеме не меньшем чем \(10^{-10}\).

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

На первой строке входного файла находятся два числа \(N\) и \(M\) — количество флаконов и число типов маминых любимых духов соответственно (\(2 \leq N \leq 100\); \(1 \leq M \leq 100\)). Далее следуют \(N\) строк, на \(i\)-ой из которых находятся два числа — тип \(L_i\) и объем \(V_i\) духов, находившихся изначально в \(i\)-ом флаконе (\(1\leq L_i \leq M\); \(0 \leq V_i \leq 1000\)). Возможно, что в нескольких флаконах находились духи одного и того же типа; возможно, что какого-то типа вообще не было на полке.

Далее во входном файле следует строка с числом \(K\) — количеством совершённых переливаний (\(1 \leq K \leq 1000\)). За ней следуют \(K\) строк, на \(k\)-ой из которых находятся три числа \(S_k\), \(T_k\) и \(A_k\) — номера флаконов, откуда и куда переливала Оля при \(k\)-ом переливании, и количество перелитой жидкости (в процентах от количества жидкости в \(S_k\)-ом флаконе перед переливанием). Гарантируется, что \(1\leq S_k,T_k\leq N\), что \(S_k\neq T_k\), и что \(0\leq A_k\leq 100\). Все числа во входном файле целые.

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

В выходной файл выведите \(M\) чисел — процентное содержание всех видов духов (от первого до \(M\)-ого) в первом флаконе после последнего переливания. Выводите результат с точностью не меньше двух знаков после запятой. Гарантируется, что после последнего переливания первый флакон оказался непустым.

Примечание

1... but does anybody really need a 6\(1\over7\)-point font that is one fourth of the way between Baskerville and Helvetica? — Donald E. Knuth, The Concept of a Meta-Font

Примеры
Входные данные
3 2
1 100
2 200
1 500
2
3 2 20
2 1 50

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

ограничение по времени на тест
2.0 second;
ограничение по памяти на тест
64 megabytes

Витя изучает новый язык программирования Питон. Пока он только успел изучить арифметические операции и условную инструкцию «if», но он уже полюбил этот язык за красоту и лаконичность синтаксиса.

Отличительной особенностью языка Питон является то, что блоки после инструкций «if» и «else» (а также в циклах «for» и «while», но Витя еще не успел изучить циклы) выделяются не ключевыми словами (например, в языке Паскаль используются слова «begin» и «end») и не скобками (например, в языке C используются фигурные скобки), а величиной отступа от начала строки, то есть количеством пробелов, которые идут в начале строки. Например, в такой программе:


if a < 0:
print("Число a - отрицательное")
a = -a
print("Теперь a - положительное")

если условие «a < 0» будет истинно, то выполнятся две следующие строки «print("Число a - отрицательное")» и «a = -a», а вот следующая строка «print("Теперь a - положительное")» уже находится вне блока условной инструкции «if» и будет выполнена после этой условной инструкции независимо от истинности проверенного условия.

Более формально правила расстановки пробелов в программе такие. Первая строка программы, а также все инструкции в программе, если они не находятся внутри блоков условных инструкций, не содержат отступа, то есть пробелов в начале строки. Если в программе встречается условная инструкция «if», то блок после этой инструкции пишется с отступом. Величина отступа может быть произвольной (1, 2, 3 и более пробелов), но для всех инструкций внутри блока отступ должен быть одинаковым. Если после инструкции «if» идет инструкция «else», то она должна иметь такой же отступ, что и соответствующая ей инструкция «if», после инструкции «else» идет блок из одной и более инструкций с дополнительным отступом. При этом отступ у блока «if» и блока соответствующего ему «else» может быть различным (смотрите примеры верных программ ниже), но внутри одного блока отступ должен быть одинаковым.

Каждой инструкции «if» может соответствовать не более одной инструкции «else». Не допускаются инструкции «else», перед которыми нет инструкции «if». После каждой инструкции «if» и «else» обязательно следует хотя бы одна инструкция с отступом.

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

Правильно (разрешается разный отступ в блоках «if» и «else») Правильно (вложенные условные инструкции) Неправильно (разный отступ в одном блоке) Неправильно (нет блока с отступом после инструкции «if»)
if x > 0:
    print("x > 0")
    print(x)
else:
  print("x < 0")
  print(-x)
print("Bye")
if a > b:
  if a > c:
        print(a)
  else:
      print(c)
else:
      if b > c:
        print(b)
      else:
        print(c)
if x > 0:
        print(x)
    print("x > 0")
if x > 0:
else:
    print(x)

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

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

Во входном файле записан некоторый текст, содержащий не более 100 строк. Длина каждой строки не превосходит 100 символов. Каждая строка состоит из символов, ASCII-коды которых не менее 32 и не более 126.

Строка считается инструкцией «if», если первыми непробельными символами строки является слово «if», после которого идет пробел, а затем — любое число любых символов. Строка считается инструкцией «else», если она содержит только одно слово «else:» (с двоеточием после него) и, возможно, отступ в начале строки.

Любая строка содержит хотя бы один непробельный символ. Последняя строка программы обязательно содержит ровно одно слово «exit()» без пробелов, завершающееся символом конца строки.

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

Если отступы в этой программе расставлены правильно, то программа должна вывести одно число 0. Если отступы расставлены неправильно, то нужно вывести минимальный номер строки, в которой нарушаются правила расстановки отступов.

Примеры тестов

Входные данные
a, b, c = map(int, input().split())
if a > b:
    if a > c:
        print(a)
    else:
        print(c)
else:
    if b > c:
      print(b)
    else:
          print(c)
exit()
Выходные данные
0
Входные данные
x = int(input())
if x < 0:
  print("Negative")
    x = -x
else:
    print("Positive")
exit()
Выходные данные
4

Примечание

Online-группа тестов оценивается в 50 баллов. Тесты этой группы не содержат инструкции «else».

Offline-группа тестов оценивается в 50 баллов.

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

ограничение по времени на тест
1.0 second;
ограничение по памяти на тест
64 megabytes

Всем известно, что в 2012 году прошла Летняя Олимпиада в Лондоне, однако не каждый знаком с историей крупнейших спортивных соревнований. Традиция игр зародилась в Древней Греции, но была забыта по завершении античной эпохи и вновь появилась лишь в конце XIX века благодаря французскому общественному деятелю Пьеру де Кубертену.

С 1896 года вновь проводятся летние Олимпийские игры, а с 1924 — зимние, причём оба вида соревнований проходят раз в четыре года. Первое время зимняя и летняя Олимпиады проводились в один и тот же год, но в конце XX века Международный олимпийский комитет принял решение установить между разными видами Игр двухгодичный перерыв. Таким образом, 1992 год был в последний раз отмечен проведением одновременно летних и зимних Олимпийских игр, в 1994 проводились только зимние, в 1996 — летние, и с тех пор они продолжают чередоваться.

Известно также, что в 1916, 1940 и 1944 годах Олимпийские игры были отменены по причине Первой и Второй мировых войн, а в 1906 году проводилась внеочередная Олимпиада.

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

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

На вход программе подаётся одно натуральное число N (1800 ≤ N ≤ 2014) — номер года.

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

Выведите «winter», если в этом году была проведена только зимняя Олимпиада, «summer», если только летняя, «winter summer», если прошли обе олимпиады, и «nothing», если в этот год олимпийских игр не проводилось.

Примеры тестов

Входные данные
1896
Выходные данные
summer
Входные данные
1924
Выходные данные
winter summer
ограничение по времени на тест
2.0 second;
ограничение по памяти на тест
64 megabytes

Юный программист решил придумать собственную игру. Игра происходит на поле размером \(N \times N\) клеток, в некоторых клетках которого расположены города (каждый город занимает одну клетку; в каждой клетке может располагаться не более одного города). Всего должно быть чётное количество городов.

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

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

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

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

Первая строка входного файла содержит одно целое положительное число N, задающее размер игрового поля (\(1 \leq N \leq 50\)).

Последующие N строк содержат по \(N\) заглавных латинских букв (без пробелов), кодирующих соответствующие клетки игрового поля: ‘C’ обозначает клетку, занятую городом, ‘D’ – пустую клетку. Гарантируется, что на поле есть хотя бы два города и всего их четное число.

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

Выходной файл должен содержать \(N\) строк по \(N\) цифр (без пробелов) в каждой, кодирующих соответствующие клетки. Цифра 1 обозначает, что данная клетка принадлежит первому государству, цифра 2 – данная клетка принадлежит второму государству. Если решений несколько, необходимо вывести любое из них.

Система оценивания

Правильные решения для тестов, в которых всего два города, будут оцениваться из 40 баллов.

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

Примеры
Входные данные
3
DDD
DDC
DDC
Выходные данные
111
111
112
Входные данные
5
DDDDD
CDCDC
DCCDC
DDDDD
DDDDD
Выходные данные
11111
11111
12222
22222
22222
ограничение по времени на тест
2.0 second;
ограничение по памяти на тест
64 megabytes

Юный математик Матвей интересуется теорией вероятностей, и по этой причине у него всегда есть с собой несколько стандартных шестигранных игральных кубиков. Стандартный шестигранный кубик имеет три противолежащих пары граней, которые размечены таким образом, что напротив грани с числом 1 находится грань с числом 6, напротив грани с числом 2 — грань с числом 5 и напротив грани с числом 3 — грань с числом 4.

Анализируя различные игры с шестигранными кубиками, Матвей придумал новую игру. В эту игру играют два игрока, и проходит она следующим образом: первый игрок бросает один или несколько стандартных кубиков (количество кубиков он определяет сам). После этого первому игроку начисляется количество очков, равное сумме чисел, оказавшихся на верхних гранях всех кубиков, а второму игроку — сумма чисел, оказавшихся на нижних гранях этих кубиков. Побеждает тот, кто набрал больше очков.

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

Матвей рассказал об этой игре своему другу, юному информатику Фоме, и они начали играть в неё через Интернет. Поскольку Фома не видит результат броска и не знает, сколько кубиков бросает Матвей как первый игрок, то о набранных каждым игроком очках он узнает только от Матвея. Чтобы проверить достоверность этой информации, Фома решил узнать, какое минимальное и максимальное количество очков мог получить он, как второй игрок, если известно, сколько очков набрал Матвей.

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

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

Первая строка входного файла содержит целое положительное число \(n\) — количество очков, которые получил первый игрок (\(1 \leq n \leq 10^{10}\)).

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

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

Система оценивания

Правильные решения для тестов, в которых 1 ≤ n ≤ 1000, будут оцениваться из 50 баллов.

Примеры
Входные данные
2
Выходные данные
5 12
Входные данные
36
Выходные данные
6 216

Страница: << 19 20 21 22 23 24 25 >> Отображать по:
Выбрано
:
Отменить
|
Добавить в контест