Блог пользователя madb00blik

Автор madb00blik, 14 лет назад, По-русски

Всем привет!
Разбирая задачи прошлых лет со всесибирской олимпиады школьников, наткнулся на несколько задачек, и меня интересуют идеи по их решению. Надеюсь, вас это заинтересует и поможет не только мне. Текст задач приведен ниже:

Задача 1

Выпускник школы получил диплом степени L на олимпиаде, которой присвоили категорию K. N вузов опубликовали условия приема по результатам олимпиад различных категорий. Для каждой категории олимпиады для каждой степени диплома указывается, каким образом он засчитывается: "вне конкурса", на "100 баллов" или "не принимается вузом". Школьник хочет узнать, в каких вузах его диплом будет засчитан по желаемому критерию. Напишите программу, которая выдает список таких вузов.

Входные данные В первой строке входного файла записаны два натуральных числа L, K и строка S, где L — степень диплома, K — категория олимпиады, а S — критерий (1 ≤ L ≤ 3, 1 ≤ K ≤ 5, S может принимать значения VK или STO). Во второй строке указано количество вузов N, количество категорий олимпиад K1 и количество степеней L1 (1 ≤ L1 ≤ 3, 1 ≤ K1 ≤ 5, 1 ≤ N ≤ 100). В следующих N строках дано описание условий приема в каждый вуз. Строка начинается названием вуза (не более 20 символов), далее записываются K1 групп по L1 слов вида VK, STO, NA, записанных через пробел. VK означает "вне конкурса", STO — "100 баллов", NA – "не принимается вузом". Описание категорий и степеней дипломов в категории идет по возрастанию.
Выходные данные В выходной файл необходимо вывести список названий вузов, подходящих критерию школьника, по одному в строке. Названия вузов выдавать в том же порядке, в каком они встречаются во входном файле. Если нужных вузов нет, то вывести одно слово NO.
Пример

input:

3 2 STO

4 2 3

VUZ1 VK VK VK VK STO STO

VUZ2 VK VK VK STO STO STO

VUZ3 VK VK VK VK VK VK

VUZ4 VK VK NA STO NA NA

output:

VUZ1

VUZ2

Я правильно думаю что это решается с помощью структур? Если да, то в каком ключе?

Задача 2

Вася и Миша купили плитку шоколада из N M квадратных долек и теперь играют в следующую игру, делая ходы по очереди. Первым ходит Вася. В свой ход нужно выбрать и съесть любую дольку, а также съесть все дольки, которые находятся выше и левее выбранной. Кто съедает последнюю дольку — проигрывает и идѐт покупать следующую шоколадку. Например, на плитке 3x3 игра может развиваться следующим образом:

Вася проиграл, так как съел последнюю дольку. Но Вася не любит проигрывать и поэтому решил написать программу, которая подскажет ему оптимальный первый ход, то есть такой ход, после которого как бы ни играл Миша, Вася сможет его победить. Помогите ему написать такую программу.

Входные данные В первой строке входного файла записаны два числа N и M — высота и ширина плитки шоколада в дольках (1 ≤ N, M ≤ 100, N*M ≤ 121).
Выходные данные Если у Васи есть оптимальный первый ход, то в выходной файл нужно вывести два числа H и W— размеры (высота и ширина) прямоугольника, съедаемого этим ходом (1 ≤ H ≤ N, 1 ≤ W ≤ M) . Если оптимальных ходов несколько, то надо выбрать среди них один с наибольшим H. Если и таких несколько, то выбрать среди них ход с наибольшим W. Если же оптимального хода нет, то есть Миша сможет обыграть Васю, как бы тот ни ходил, то нужно в выходной файл записать 0 0.
Пример

input:

3 3

output:

2 2


input:

1 1

output:

0 0

Задача 3

Вам дана последовательность целых чисел, в которой некоторые числа заменены на символ '*', а одно число вообще пропущено. Известно, что исходная последовательность чисел представляла собой арифметическую прогрессию. Гарантируется, что не менее трех чисел в последовательности замене не подверглись.
Вам необходимо определить сумму всех чисел исходной последовательности. Если по входным данным невозможно однозначно определить сумму, необходимо вывести все возможные значения суммы в порядке возрастания.

Входные данные Во входном файле задана последовательность, состоящая из символов '*' и целых чисел. Все данные введены в одну строку через пробел. Количество элементов в последовательности больше 2 и не превосходит 10. Целые числа по модулю не превосходят 100.

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

input.txt

2 * 6 10

output.txt

30

На этом все, очень интересно было бы посмотреть чужие соображения по этому поводу :)

Полный текст и комментарии »

  • Проголосовать: нравится
  • +2
  • Проголосовать: не нравится