Школьная олимпиада по программированию ФМШ 2007 г. Москвы, 26 ноября 2006 года Школьная командная олимпиада по программированию. 26 ноября в ФМШ 20007 состоялась школьная олимпиада по программированию среди учащихся 9 – 11 классов. В олимпиаде приняло участие 15 команд по 2 – 3 человека. В течении 4 часов участником предлагалось сдать тестирующей системе 8 задач. По результатам олимпиады 7 команд были награждены дипломами и памятными призами(книгами). Результаты: Команда 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Аминев Б., Дударев А., Камаев П (11 «Б») Перфилов Н., Савин Н., Стуковнин В.(11 «А») Емельянов И., Кукушкин А., Буянов А. (9 «Б») Суслов А., Лукомский И., Сайковский А. (10 «Б») Ильин И., Панарин К., Захаров А. (10 «Б») Ивкина Е., Громов Р., Терентьев А. (11 «Б») Ретунский Н.,Гасанова К., Коц Е. (11 «А») Соловьев П., Серов А., Жарков М. (9 «В») Местенев А., Стеклов Н., Качахидзе А. (10 «Б») Самохвалов В., Христолюбов А., Новичков А. (9 «В») Крюков П., Мамедова Ф., Маглаперидзе О.(11 «Б») Никонов А., Концевич А. (9 «Б») Зайцев О., Харлан А., (10 «А») Качахидзе А., Бессуднов В., Полянин В. (9 «А») Стеклова Л., Димиева А. (9 «В») Зам. Директора по УВР Председатель МО «Информатика и ИКТ » Председатель Жюри Ре ше но 8 7 6 6 5 5 5 4 4 3 3 3 3 3 2 Место Диплом 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 I II II II III III III Чулков П. В. Шершнев Е. Ф. Гуровиц В. М. 1 Школьная олимпиада по программированию ФМШ 2007 г. Москвы, 26 ноября 2006 года Приложение 1. Положение о школьной командной олимпиаде по программированию: Оргкомитет: Чулков П. В., Гуровиц В. М., Шершнев Е. Ф., Шапарин Е. А., Мамонтов А. В., Никитин В. П. Участники: Команды учащихся 9 – 11 классы по 3 человека. Цели и задачи: Активизация учебной деятельности учащихся, подготовка учащихся и рабочих мест к командной олимпиаде(3 декабря), выявление и поощрение способных учащихся, совершенствование знаний, умений и навыков по программированию, информатике и информационным технологиям, повышение интереса к предмету и развитие учебнопознавательных процессов учащихся. Подготовительная часть: До 20 ноября (включительно) подаются заявки на участие – команда состоит из 3 человек, 1-2 команды от класса. Заявки подаются Гуровцу В. М. в бумажном или электронном виде по следующему образцу Класс: Номер команды: Учитель: Состав команды: 1. Фамилия, Имя 2. Фамилия, Имя 3. Фамилия, Имя Требуемые среды программирования (Контактные данные: gurovic@gmail.com; gurovic@mccme.ru) План проведения олимпиады Время Действия 9-00 – 9-30 Сбор оргкомитета. 9-30 – 9-50 Регистрация команд и распределение по кабинетам. 9-50 – 10-10 Раздача условий, объяснение правил участия в олимпиаде. 10-10 – 14-10 Решение и сдача решений участниками задач олимпиады. 14-15 – 14-45 Разбор задач 14-45 – 15-00 Награждение победителей Описание олимпиады. Каждой команде предоставляется один компьютер и набор (8-10) задач. В течение олимпиады (3-4 часа) они решают эти задачи на языке программирования C или Паскаль и отсылают их для автоматической проверки. Задачи проверяются на наборе заранее подготовленных тестовых данных, и считается решенной, если она выдает верный ответ на всех тестах. В случае, если программа не проходит один из тестов, команда может исправить решение и послать его на проверку повторно. Команде не сообщается, на каком именно тесте ее решение выдает неверный ответ. Результаты подводятся следующим образом. Команды упорядочиваются по количеству решенных задач, при равном числе решенных задач учитывается время, потраченное на решение задач и количество попыток по решенным задачам. Техническая часть проведения олимпиады. Команды рассаживаются в компьютерные классы не более 7-8 команд в класс. Желательно, чтобы команды работали в тех классах, где у них проходят уроки информатики. Команды 2 Школьная олимпиада по программированию ФМШ 2007 г. Москвы, 26 ноября 2006 года могут использовать языки Си или Паскаль. Программы, которые пишут участники, должны считывать входные данные с клавиатуры и выводить ответ на экран строго в том формате, который описан в условии задачи. Для проведения олимпиады планируется использовать тестирующую систему, разработанную в СУНЦ МГУ. Тестирующий сервер будет установлен в 405 аудитории. Для сдачи решений все машины в компьютерных классах должны быть подключены к школьной сети. Сдача решений будет производиться, используя программу-клиент: это один exe файл, который можно положить либо на каждый компьютер, либо запускать прямо с сетевого диска. Для тестирование сдаются исходные тексты программ, которые компилируются тестирующим сервером компиляторами Delphi и Visual C++. Для проведения олимпиады нужно по 1 человеку в каждый компьютерный класс, который будет следить за тем, чтобы команды не общались между собой и решать технические проблемы. 3 Школьная олимпиада по программированию ФМШ 2007 г. Москвы, 26 ноября 2006 года Приложение 2. Памятка участнику олимпиады. Правила проведения олимпиады Каждой команде из трех человек предоставляется комплект задач и один компьютер. Команды в течение 4 часов решают предложенные задачи и сразу отправляют их на проверку. Программа проверяется автоматической системой тестирования на наборе заранее подготовленных тестовых примеров (входных данных). В случае если программа правильно работает на всех приведенных примерах и укладывается при этом в установленный лимит времени, задача считается решенной. В противном случае команде сообщается, сколько тестов "прошла" программа (например, "6 point(s) gained" - пройдено 6 тестов) и результат работы проверки программы на следующем тесте: WA - wrong answer (неправильный ответ) PE - presentation error (неправильный формат вывода; например, программа не выводит ничего, или выводит текст вместо числа, или выводит несколько чисел, не разделяя из пробелами или переводами строки и т.п.) TL - time limit (превышен лимит времени работы на данном тесте) CE - compilation error (ошибка при компиляции) Команда имеет право исправлять свое решение и посылать его на проверку повторно неограниченное количество раз. Правила подведения итогов В итоговой таблице результатов команды упорядочиваются по количеству решенных задач. Команды, решившие одинаковое количество задач, упорядочиваются по дополнительному параметру - штрафному времени. Штрафное время команды вычисляется по следующему правилу. Если команда успешно сдала задачу, то к штрафному времени прибавляется время сдачи задачи и по 20 минут за каждую предшествующую неуспешную попытку сдачи этой задачи. Например, если задача сдана успешно на 75-й минуте олимпиады с третьей попытки, то команда получит 75 штрафных минут плюс 2x20 штрафных минут за две неуспешные попытки. Общее количество тестов в разных задачах разное и участникам заранее не сообщается. Во всех задачах первые тесты - это тесты, приведенные в примерах условия. Технические вопросы Команда имеет право использовать только компьютер, указанные в выданной ей регистрационном листе, либо компьютер, указанный дежурным по аудитории. Вход в Windows осуществляется с использованием логина и пароля, указанных в регистрационном листе. Файлы требуется сохранять в директории или на диске, указанном в регистрационном листе. Для отправки решений задач на проверку используется программа client, которую рекомендуется скопировать себе на рабочий стол из директории, указанной дежурным по 4 Школьная олимпиада по программированию ФМШ 2007 г. Москвы, 26 ноября 2006 года аудитории. Запустив client, введите Login для входа в тестирующую систему, указанные в регистрационном листе, оставьте поле Password пустым, в поле Server введите vg. При сдаче задаче выберите ее в списке двойным щелчком мыши, выберите тип файла (pas Паскаль, с - Си, cpp - Си++), и исходный файл (файл с текстом программы). Не нужно посылать на проверку исполняемый (exe) файл! Через несколько секунд после отправки файла тестирующая система сообщит вам результат проверки. При большой нагрузке на сервер тестирование может занимать несколько минут. Не отправляйте тот же файл на тестирование повторно: это увеличивает ваше штрафное время! Ваша программа должна выводить результат на экран в точно соответствии с форматом выходных данных, указанным в задаче. В частности, ваша программа не должна выводить ничего лишнего (как то "Vvedite x" и т.п.), выводимые числа требуется разделять пробелами или переводами строк, если один из возможных ответов, программа не должна выводить остальные и т. п. Программы не должны очищать экран, останавливаться после вывода результата и т. п. В программе на языке Паскаль нельзя использовать дополнительные модули (crt, math, …). При выполнении программы переменным по умолчанию не присваивается значение 0, как это обычно происходит в среде Borland Pascal! По всем возникающим вопросам обращайтесь к дежурному по аудитории! Вопросы по условиям задач задаются только в письменном виде, с указанием на листке с вопросом N кабинета, N компьютера и названия команды. Вопросы передаются через дежурного по аудитории. Комментарии по условиям задач устно не даются! 5 Школьная олимпиада по программированию ФМШ 2007 г. Москвы, 26 ноября 2006 года Приложение 3. Список задач предлагавшихся для решения. Задача A. Красная шапочка Красная Шапочка часто навещает свою бабушку. Но она очень боится, что рано или поздно ее бабушку опять навестит волк. Поэтому она решила договориться с Лесничим об охране бабушки. Лесничий согласился охранять бабушку за 10 пирожков. Узнав об этом, волк сказал Красной Шапочке, что ей совершенно не за чем тратить пирожки на Лесничего. За половину тех пирожков, которые Красная Шапочка несет бабушке, Волк пообещал не трогать ее. Мама испекла несколько пирожков, и попросила Красную Шапочку отнести их бабушке. Требуется определить, сколько пирожков Красная Шапочка сможет донести до бабушки. Входные данные Вводится одно число - количество пирожков, которые испекла мама. Выходные данные Программа должна вывести на экран одно число - сколько пирожков Красная Шапочка сможет донести до бабушки. Примеры 1) Входные данные: 12 Выходные данные: 6 Комментарий: если мама испекла 10 пирожков, то выгоднее отдать половину пирожков (6 штук) волку, чем 10 пирожков Лесничему. В этом случае Красная Шапочка сможет донести до бабушки 12-6=6 пирожков. 2) Входные данные: 100 Выходные данные: 90 Комментарии: если мама испекла 100 пирожков, то выгоднее отдать 10 пирожков Лесничему, чем половину (50 пирожков) волку. До бабушки в этом случае Красная Шапочка донесет 100-10=90 пирожков. 3) Входные данные: 20 Выходные данные: 10 Комментарий: если испечено 20 пирожков, то в любом случае (и если отдать половину пирожков Волку, и если отдать 10 пирожков Лесничему) бабушке останется 10 пирожков. Ограничения Решение задачи будет проверяться на тестовых примерах, в которых число испеченных мамой пирожков - натуральное число и не превышает 100. 6 Школьная олимпиада по программированию ФМШ 2007 г. Москвы, 26 ноября 2006 года Задача B. Регистрация на web-сайте При регистрации на некотором сайте, пользователя просят ввести фамилию, дату рождения и номер банковской карточки. Системный администратор заметил, что очень часто пользователи путают поля, и вводят, скажем, фамилию в поле для даты рождения, а дату рождения в поле фамилии и т.д. Чтобы не заставлять пользователей вводить данные заново, администратор сайта решил написать скрипт, который будет сам переставлять введенные данные в нужном порядке. Помогите ему в этом нелегком деле. Входные данные Вводятся три строки. В одной из строк вводится фамилия, состоящая только из латинских букв (строчных или заглавных). В другой строке вводится дата рождения. В оставшейся строке вводится номер банковской карточки. Выходные данные Программа должна вывести также три строки. В первой строке - фамилию, во второй дату рождения, в третьей - номер банковской карточки. Примеры 1) Входные данные: Smith 112324332 12.10.1964 Выходные данные: Smith 12.10.1964 112324332 Комментарий: в первой строке выводится фамилия, во второй - дата рождения, в третьей - номер банковской карточки. 2) Входные данные: Ivanov 01.01.2000 11111 Выходные данные: Ivanov 01.01.2000 11111 Комментарий: данные введены в правильном порядке, поэтому выводим их без изменений. Ограничения Тестовые примеры, на которых проверяется решение, удовлетворяют следующим ограничениям. Фамилия записывается латинскими строчными и заглавными буквами, длина фамилии не меньше трех символов и не больше 50. Номер банковской карточки натуральное число, состоящее не менее чем из 5 и не более чем из 15 цифр. Дата рождения записывается в формате ДД.ММ.ГГГГ (день и месяц вводятся ровно двумя цифрами каждый, год - ровно четырьмя) 7 Школьная олимпиада по программированию ФМШ 2007 г. Москвы, 26 ноября 2006 года Задача C. Негласный палиндром Возьмем произвольное слово и проделаем с ним следующую операцию: поменяем местами его первую согласную букву с последней согласной буквой, вторую согласную букву с предпоследней согласной буквой и т.д. Если после этой операции мы вновь получим исходное слово, то будем называть такое слово негласным палиндромом. Например, слова sos, rare, rotor, gong, karaoke являются негласными палиндромами. Вам требуется написать программу, которая по данному слову определяет, является ли оно негласным палиндромом. Входные данные Вводится одно слово. Выходные данные Программа должна вывести YES, если введенное слово является негласным палиндромом, и NO в противном случае. Примеры 1) Входные данные: tennete Выходные данные: YES Комментарий: Первая согласная буква - t - меняется местами с последней, тоже t, вторая согласная буква - n - меняется местами с предпоследней, тоже n. 2) Входные данные: karaoke Выходные данные: YES Комментарий: Первая согласная буква - k - меняется местами с последней, тоже k, вторая согласная буква является одновременно и предпоследней, поэтому остается на месте. 3) Входные данные: disk Выходные данные: NO Комментарий: это слово не является негласным палиндромом, поскольку при указанных перестановках букв получается слово kids. Ограничения Во всех тестовых примерах слово записано строчными латинскими буквами и состоит из не более чем 20 символов. 8 Школьная олимпиада по программированию ФМШ 2007 г. Москвы, 26 ноября 2006 года Задача D. Квадратные таблицы Вася записывает в клетки квадратной таблицы NxN натуральные числа по порядку, сначала заполняя первую строку слева направо, затем вторую и т.д. (см. рисунок слева). Петя заполняет такую же таблицу, расставляя числа сначала в первый столбец сверху вниз, затем во второй столбец и т.д. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3 4 5 9 13 6 10 14 7 11 15 8 12 16 При этом оказалось, что некоторые числа и Вася, и Петя записали в одну и ту же клетку (например, число 6 записано во вторую строку второго столбца обеих таблиц). Вам требуется написать программу, выводящую на экран все числа, которые в обеих таблицах записаны в одних и тех же клетках. Входные данные Вводится одно число - размер таблицы. Выходные данные Программа должна вывести все числа, которые в обеих таблицах стоят на одном и том же месте, в порядке возрастания, через пробел. Примеры 1) Входные данные: 4 Выходные данные: 1 6 11 16 Комментарий: в таблицах 4 x 4 на одних и тех же местах стоят четыре числа: 1, 6, 11, 16 (см. рисунки). 2) Входные данные: 1 Выходные данные: 1 Комментарий: в таблице из одной клетки записано единственное число 1, оно и является ответом в задаче. Ограничения Размер таблицы - натуральное число, не превосходящее 100. 9 Школьная олимпиада по программированию ФМШ 2007 г. Москвы, 26 ноября 2006 года Задача E. 3A + 5B Многие натуральные числа можно представить в виде N = 3A + 5B, где A и B - целые неотрицательные числа. Например, 11=3x2+5x1, 20=3x0+5x4. Вам требуется по заданному числу определить, можно ли его представить в таком виде, и если это возможно, найти подходящие A и B. Входные данные Вводится одно число. Выходные данные Программа должна вывести два целых неотрицательных числа A и B, разделенных пробелом, если такие числа существуют. В противном случае вывести слово IMPOSSIBLE. Если решений несколько, выдать любое из них. Примеры 1) Входные данные: 23 Выходные данные: 1 4 Комментарий: 23 = 3x1 + 5x4. Но есть и другое решение: 23 = 3x6 + 5x1, таким образом, возможен и другой ответ: "6 1". 2) Входные данные: 4 Выходные данные: IMPOSSIBLE Комментарий: число 4 невозможно представить в виде 3A+5B с неотрицательными целыми A и B. 3) Входные данные: 10 Выходные данные: 0 2 Комментарий: 10 = 3x0 + 5x2 - это единственное решение. Ограничения Программа должна верно работать для чисел, не превосходящих 10 000. 10 Школьная олимпиада по программированию ФМШ 2007 г. Москвы, 26 ноября 2006 года Задача F. Слоники Расставьте на шахматной доске размером N x N минимальное количество шахматных слонов так, чтобы они били все поле (любая клетка должна находиться на одной диагонали хотя бы с одним слоном; считается, что слон бьет и ту клетку, на которой стоит). Входные данные Вводится одно число - размер поля. Выходные данные Программа должна вывести одно число - минимальное количество слонов, которые можно расставить на данной доске, так чтобы они били все поле Пример ۩ Входные данные: 3 ۩ ۩ Выходные данные: 3 Комментарий: один из возможных вариантов расстановки трех слонов приведен на рисунке. Двух слонов недостаточно, поскольку необходим слон, который будет бить черные поля, и хотя бы два слона, которые будут бить белые поля. Ограничения Программа должна верно работать для досок, размер которых не превосходит 10 000. 11 Школьная олимпиада по программированию ФМШ 2007 г. Москвы, 26 ноября 2006 года Задача G. Треугольники Дан набор из N отрезков различной длины. Сколькими способами можно выбрать из этих отрезков три, из которых можно составить (невырожденный) треугольник? Входные данные Сначала вводится количество отрезков, затем длины этих отрезков (еще N чисел). Выходные данные Программа должна вывести одно число - искомое количество способов Примеры 1) Входные данные: 4 1 3 2 4 Выходные данные: 1 Комментарий: дано 4 отрезка с длинами 1, 2, 3 и 4. Из них можно составить единственный треугольник со сторонами 2, 3, 4. Другие тройки не удовлетворяют неравенству треугольника: 1+2=3, 1+3=4, 1+2<4. 2) Входные данные: 3 10 100 1000 Выходные данные: 0 Комментарий: из данных трех отрезков составить треугольник нельзя. Ограничения Количество отрезков - не менее 3 и не более 20. Длина каждого отрезка - натуральное число, не превосходящее 1000. Все отрезки имеют разную длину. 12 Школьная олимпиада по программированию ФМШ 2007 г. Москвы, 26 ноября 2006 года Задача H. Шашки На доске стоит белая шашка. Требуется определить, может ли она попасть в заданную клетку, делая ходы по правилам (не превращаясь в дамку). Входные данные Вводится клетка, где стоит шашка, в шахматной нотации, а затем, через пробел, клетка, куда шашка должна попасть. Выходные данные Выведите слово YES (заглавными буквами), если шашка может попасть из начальной клетки в указанную, и NO в противном случае. Примеры 1) Входные данные: a1 b2 Выходные данные: YES Комментарий: для выполнения указанного перемещения шашка должна сделать один ход вперед и вправо. 2) Входные данные: b2 a1 Выходные данные: NO Комментарий: назад шашка ходить не может 3) Входные данные: a1 h7 Выходные данные: NO Комментарий: a1 и h7 - клетки разного цвета. 4) Входные данные: a1 h8 Выходные данные: YES Комментарий: 7 ходов вправо вверх Ограничения Доска имеет размер 8x8, вертикали нумеруются маленькими латинскими буквами от a до h, горизонтали - числами от 1 до 8. 13