a2d7dc5a7a4d489663cee232ccb16301.ppt
- Количество слайдов: 15
Разбор задач олимпиады ФПМИ 2010 года (Лига B) © 2010, Serge Kashkevich
Статистика решения задач Сложность (по мнению авторов) Количество решивших 1 4 5 16 6 0 Сверхпростые числа 4 1 3 2 4 3 0 15 5 10 Турнир по переписке 4 4 Название задачи Числа-палиндромы Скобочная последовательность Буква А Алхимия Золотая середина Округление Галлеоны, сикли и кнаты Шаблоны
Числа-палиндромы n Автор задачи – С. И. Кашкевич n Задача впервые была предложена на чемпионате Гродненского университета в 2010 году. Для решения задачи необходимо: n вычислить сумму двух чисел; n выделить все цифры суммы в строку; n проверить, является ли полученная строка палиндромом
Скобочная последовательность n Задача была предложена на интернет-олимпиаде ИТМО 23 сентября 2006 года Задача сводится к проверке правильности скобочной последовательности с использованием стека. Исходную строку «склеиваем» саму с собой, и далее рассматриваем все подстроки длины N, начинающиеся с открывающей скобки. Если хотя бы одна из подстрок является правильной скобочной последовательностью – выводим ответ “Yes”, иначе – “No”.
Скобочная последовательность Алгоритм проверки правильности скобочной последовательности с использованием стека. for i : = 1 to N do begin if (Si – открывающая скобка) then заносим Si в стек else begin извлекаем из стека символ T; if (стек пуст) or (типы скобок T и Si различаются) then скобки расставлены неверно; end; if (стек пуст) then скобки расставлены верно else скобки расставлены неверно;
Буква А n Автор задачи – С. И. Кашкевич n Задача впервые была предложена на чемпионате Гродненского университета в 2010 году. Задача решается перебором всех троек отрезков. (Естественно, если N<3, ответом будет 0. ) Для каждой тройки: n определяем «ножки» - непараллельные отрезки, пересекающиеся в концах; n проверяем, является ли третий отрезок правильной «перекладиной» Для решения задачи необходимо уметь определять взаимное расположение двух отрезков.
Алхимия n Задача была предложена на интернет-олимпиаде ИТМО 23 сентября 2006 года Строим ориентированный граф, вершинами которого являются вещества, а дуга проходит из вершины A в вершину B, если можно превратить вещество A в вещество B. В полученном графе ищем кратчайший путь из начальной в конечную вершину методом поиска в ширину. Особенностью задачи является то, что начальное и конечное вещество могут отсутствовать в списке веществ, упомянутых в алхимических реакциях.
Золотая середина n Автор задачи – С. И. Кашкевич Задача, которую, по идее, должны решить все. Приведём авторское решение: ab : = (a<b); bc : = (b<c); ac : = (a<c); if if if ab and bc then d : = b; {a<b<c} (not ab) and (not bc) then d : = b; {c<b<a} ab and (not ac) then d : = a; {c<a<b} (not ab) and ac then d : = a; {b<a<c} (not bc) and ac then d : = c; {a<c<b} bc and (not ac) then d : = c; {a<c<b}
Округление n Автор задачи – С. И. Кашкевич Относительно простая по условию задача требует аккуратного разбора большого количества случаев: n N <= количества разрядов в целой части (результат – ‘ 0’); n N <= 0 (выводить или нет десятичную точку); n N < 0 (добавлять ли нули в целой части); n перенос единицы из дробной части в целую и т. д.
Галлеоны, сикли и кнаты n Автор задачи – С. И. Кашкевич Переведём все денежные величины в кнаты. Это даёт возможность проводить все вычисления в целых числах без промежуточных переводов. После выполнения вычислений переведём количество кнатов, оставшихся у Гарри Поттера, в требуемый формат.
Шаблоны n Задача была предложена на интернет-олимпиаде ИТМО 23 сентября 2006 года Задача требует умения работать с битовыми масками. Заведём различные битовые маски для каждого символа, входящего в шаблон: 0 1 2 3 4 5 6 7 8 001 h 002 h 004 h 008 h 010 h 020 h 040 h 080 h 100 h 9 a b c d e f g ? 200 h 00 fh 01 eh 03 ch 078 h 0 f 0 h 1 eoh 3 coh 3 ffh
Шаблоны Для соответствующих символов обоих шаблонов выполняем операцию and над их битовыми масками и считаем количество единиц в результате. Полученное число К равно количеству различных символов, допустимых для этой позиции. Результат будет равен произведению величин К для различных позиций.
Сверхпростые числа n Задача была предложена на интернет-олимпиаде ИТМО 7 октября 2006 года Формируем массив P из первых 3571 простых чисел (3571 – 500 -е простое число). Тогда результат для заданного k будет равен P[P[k]].
Турнир по переписке n Автор задачи – С. И. Кашкевич Заведем матрицу P размера N * N, в которой будут храниться результаты каждой партии: n P[i, i] = 0; n P[i, j] = 1, если игрок i выиграл у игрока j; n P[i, j] = 0, если игрок j выиграл у игрока i; n P[i, j] = 0. 5, если партия между игроками i и j завершилась вничью; n P[i, j] = -1, если партия между игроками i и j ещё не завершилась.
Турнир по переписке Заполнение матрицы будем вести в несколько этапов: n полагаем P[i, j] : = -1 для всех i<>j; n заносим результаты завершившихся партий; n определяем, кто из игроков выбыл из турнира; n для всех P[i, j] = -1 определяем окончательный результат партии, в зависимости от состояния игроков (ничья, поражение отказавшегося, обоюдное поражение) После этого рассчитываем сумму значений в строках матрицы и выполняем сортировку для вывода.
a2d7dc5a7a4d489663cee232ccb16301.ppt