Методические рекомендации по решению предложенных олимпиадных задач





Скачать 222.95 Kb.
НазваниеМетодические рекомендации по решению предложенных олимпиадных задач
Дата публикации19.08.2013
Размер222.95 Kb.
ТипДокументы
100-bal.ru > Информатика > Документы

Инструктивные и методические материалы для регионального этапа Всероссийской олимпиады школьников по информатике в 2008/2009 учебном году


Часть 3. Методика проверки и система оценивания

решений задач регионального этапа Всероссийской олимпиады школьников по информатике в 2008/2009 учебном году


Для проверки и оценивания решений участников центральной методической комиссией по информатике подготовлены следующие материалы:

  • общие методические рекомендации по проверки решений участников;

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

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

  • систему оценки решений участников;

  • краткие методические рекомендации по решению предложенных олимпиадных задач.

  1. Общие методические рекомендации по проверки решений участников

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

  1. Всем участникам регионального этапа Всероссийской олимпиады школьников на каждом туре предлагается комплект из четырех задач, подготовленный в соответствии с п. 16 Положения о Всероссийской олимпиаде школьников, утвержденного Приказом Минобрнауки от 22 октября 2007 года
    № 286.

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

  3. Заданные в условии каждой задачи ограничения на максимальное время работы программы ориентированы на использование при проверке решений участников компьютеров с процессором Celeron 3 ГГц. Именно такого типа компьютеры необходимо использовать для проверки решений участников, причем все решения должны проверяться на одинаковых компьютерах.

Если в распоряжении жюри окажутся компьютеры с меньшим быстродействием, то рекомендуется установить ограничение по времени в каждой задаче в два раза больше, чем указано в исходном условии задачи, но не менее 1 секунды. Например, если есть компьютер с процессором Pentium 3 866 МГц и в условии задачи ограничение по времени равно 2 секундам, то необходимо установить ограничение, равное 4 секундам. В свою очередь, если есть компьютер с процессором Core 2 Duo 2.5 ГГц и в условии задачи ограничение по времени равно 0,2 секунды, то следует задать новое ограничение, равное 1 секунде.

  1. Результатом решения всех предложенных задач является исходный текст программы на одном из разрешенных языков программирования – Pascal, C, С++, и Visual Basic. Допустимыми являются следующие среды программирования:


Borland Delphi 7.0;

Borland Pascal 7.0;

Borland C++ 3.1;

FreePascal 2.0.2;

Microsoft Visual C/C++ 2005 Express Edition;

GNU C/C++ 3.4.2 и выше (версия для Windows — MinGW)

Microsoft Visual Basic 2005 Express Edition

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

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

  • компиляция исходного текста программы;

  • последовательное исполнение полученного exe-файла для файлов с входными данными, соответствующих тестам из набора тестов для данной задачи,

  • сравнение результатов исполнения программы на каждом тесте с правильным ответом.

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

  1. Жюри должно использовать вполне определенные командные строки для компиляции решений, о чем участников следует известить до начала тура. Эту информацию необходимо разместить в Памятке участнику, например, в следующем виде:

Компилятор

Командная строка

Borland Delphi 7.0

dcc32 -сс <исходный файл>

Free Pascal 2.2.0

fpc <исходный файл>

Visual С 2005

cl /02 /ТС <исходный файл>

GNU С 3.4.2 (MinGW)

gcc -02 -х с <исходный файл>

Visual C++ 2005

cl /02 /EHs /TP <исходный файл>

GNU C++ 3.4.2 (MinGW)

g++ -02 -х с++ <исходный файл>

Visual Basic 2005

vbc <исходный файл>

Borland Pascal 7.0

bрс <исходный файл>

Borland С 3.1

bcс -ml <исходный файл>

Borland C++ 3.1

bcс -ml <исходный файл>

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

  1. Размер файла с исходным текстом программы не должен превышать 256 килобайт. Время компиляции программы не должно превышать 1 минуты. В случае нарушения этих ограничений решение участника считается неправильным и никакие баллы за эту задачу участнику не начисляются Информация об этих ограничениях также должна быть размещена в Памятке участнику.

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

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

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

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

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

  1. Характеристика тестов для каждой задачи

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

  1. группа простых тестов;

  2. группа тестов на все частные случаи, позволяющие выявить особенности используемых алгоритмов;

  3. группа общих тестов (входят достаточно случайные тесты, разные по размеру: от простых тестов до сложных);

  4. группа антиэвристических тестов (тесты, позволяющие выявлять приближенные решения);

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

Количество тестов, подготовленных для каждой задачи, представлено в таблице ниже.

Задача

Количество тестов

1. Черно-белая графика

25

2. Газон

20

3. Трамвай

50

4. Треугольники

25

5. Клавиатура

20

6. Неправильное сложение

25

7. Числа

50

8. Перестановки

50

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

Все вышеназванные материалы размещены на компакт-диске в папке с именем «Материалы для проверки решений». Тесты и проверяющие программы для каждой задачи содержатся в папке с именем этой задачи. Например, для задачи 1 «Черно-белая графика» используется папка с именем «1 Черно-белая графика». Кроме того, в папке «Материалы для проверки решений» содержится папка с именем «lib», в которой находится файл testlib.pas с библиотекой для проверяющих программ.

В папке для каждой задачи, в свою очередь, находятся папки «preliminary» и «tests», а также программы для проверки решений этой задачи. Папка «preliminary» содержит тесты из условия задачи. Весь комплект тестов содержится в папке «tests». Тесты здесь пронумерованы от 1 до N, где N — количество тестов к задаче. Файл с правильным ответом на соответствующий тест называется «XY.a». Здесь XY — двузначный номер теста, дополненный при необходимости ведущим нулем. Например, файл с седьмым тестом называется «07», а файл с пятнадцатым тестом — «15», файл с правильным ответом на седьмой тест называется «07.a», файл с правильным ответом на пятнадцатый тест — «15.a».

В папке «tests» кроме файлов с тестами содержатся также:

    • исходный текст программы генератора тестов (она может называться «doall.dpr», «generateTests.dpr», «TestsGen.java», «write_tests.dpr», «TestGen.java», «numberes_gen.java»),

    • исходный текст программы визуализатора тестов («Visualizer.java», только в папках для тех задач, для которых она разработана);

    • пакетные файлы для генерации тестов («doall.cmd», «tall.cmd», «clean.cmd», «wipeall.cmd») и визуализации тестов («testvis.cmd»).

Для проверки решений участников в автоматическом режиме необходимо для каждой задачи использовать соответствующие проверяющие программы. Проверяющая программа для каждой задачи находится в соответствующей папке в файле «check.dpr». Для ее компиляции следует использовать компилятор Borland Delphi. Она использует библиотеку testlib для проверяющих программ, которая находится в файле «testlib.pas». Для проверки ответа на тесте следует запустить программу с тремя параметрами командной строки — входной файл, выходной файл и файл с правильным ответом.

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

  1. Система оценки решений участников

Система оценки решений каждой задачи основана на следующих положениях:

  1. Решение каждой задачи оценивается из 100 баллов, то есть, максимальное количество баллов, которое участник может получить за полное решение каждой задачи, составляет 100 баллов.

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

    Задача

    Количество тестов

    Оценка теста

    1. Черно-белая графика

    25

    4 балла

    2. Газон

    20

    5 баллов

    3. Трамвай

    50

    2 балла

    4. Треугольники

    25

    4 балла

    5. Клавиатура

    20

    5 баллов

    6. Неправильное сложение

    25

    4 балла

    7. Числа

    50

    2 балла

    8. Перестановки

    50

    2 балла

  3. Итоговая оценка проверки решений всех задач олимпиады для каждого участника формируется как сумма полученных этим участником баллов за каждую задачу.

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

Задача 1. «Черно-белая графика»

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

Задача 2. «Газон»

Для проверки решений данной задачи выделены следующие три группы тестов:

  1. небольшие тесты (1 – 11), допускающие решения с перебором пучков травы;

  2. средние тесты (12 – 15), выявляющие вычисление ответа с помощью 32-битного типа данных;

  3. большие тесты (16 – 20), допускающие только правильное решение.

Данная система тестов позволяет выявить и оценить следующие частичные решения:

  1. решения со временем работы O(r2), перебирающие все постриженные пучки травы и считающие количество политых среди них (решения оцениваются из 55 баллов);

  2. решения, оперирующие 32-битными числами (решения оцениваются из 70 баллов);

  3. решения, содержащие различные ошибки при увеличении ответа (решения оцениваются из 80 баллов).

Задача 3. «Трамвай»

Для проверки решений данной задачи выделены следующие три группы тестов:

  1. небольшие тесты (1 – 30), оценивающие неэффективные решения, имеющие худшие асимптотические оценки, чем O(N∙P);

  2. средние тесты (31 – 40), выявляющие решения, реализующие операции с упорядоченными множествами за линейное время;

  3. большие тесты (41 – 50), использующиеся для проверки только полных решений.

При оценке решений участников учитываются следующие частичные решения:

  1. неэффективные решения, реализующие операции с упорядоченными множествами за линейное время (решение оцениваются из 80 баллов);

  2. неэффективные решения, имеющие худшие асимптотические оценки, чем O(N∙P) (решение оцениваются из 60 баллов);

  3. решения, оперирующие 32-битными числами для подсчета ответа (решение оцениваются из 60 баллов).

Задача 4. «Треугольники»

Для проверки решений данной задачи выделены следующие три группы тестов:

  1. небольшие тесты (1 – 8), выявляющие решения, основанные на полном переборе всех треугольников;

  2. средние тесты (9 – 12), выявляющие решения, использующие вещественные числа;

  3. большие тесты (13 – 25), использующиеся для проверки только полных решений.

При оценке решений участников учитываются следующие частичные решения:

  1. неэффективные решения, такие как перебор и проверка всех возможных треугольников (решения оцениваются из 40 баллов);

  2. решения с потерей точности, использующие вычисление полярного угла и сортировку по этому значению (решения оцениваются из 60 баллов).

Задача 5. «Клавиатура»

Система тестов для проверки решений данной задачи подобрана таким образом, чтобы выявить возможные ошибки в реализации правильного алгоритма и частичные решения, содержащие ошибки в программной реализации (оцениваются из 80 баллов).

Задача 6. «Неправильное сложение»

Для проверки решений данной задачи выделены следующие три группы тестов:

  1. небольшие тесты (1 – 10), содержащие не более чем трехзначные числа;

  2. средние тесты (11 – 19), содержащие не более чем пятизначные числа;

  3. большие тесты (20 – 25), содержащие 6- и 7-значные числа.

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

Задача 7. «Числа»

Для проверки решений данной задачи выделены следующие две группы тестов:

  1. небольшие тесты (1 – 30), выявляющие переборные решения;

  2. большие тесты (31 – 50), использующиеся для проверки полных решений.

При оценивании решений участников переборные решения получают не более 70 баллов.

Задача 8. «Перестановки»

Для проверки решений данной задачи выделены следующие три группы тестов:

  1. небольшие тесты (1 – 25), оценивающие переборные решения;

  2. средние тесты (26 – 42), выявляющие решения, использующие 32-битный тип данных;

  3. большие тесты (43 – 50), использующиеся для проверки полных решений.

При оценивании решений участников учитываются следующие частичные решения:

  1. переборные решения (оцениваются из 50 баллов);

  2. решения, оперирующие 32-битными числами (оцениваются из 84 баллов).



  1. Краткие методические рекомендации по решению задач

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

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

Сказанное подтверждает общая характеристика всех задач, представленная в таблице ниже.

Задача

Тематика

Алгоритмическая сложность

Техническая сложность

1. Черно-белая графика

Техника программирования

низкая

низкая

2. Газон

Математика

средняя

средняя

3. Трамвай

Структуры данных

средняя

высокая

4. Треугольники

Геометрия

высокая

высокая

5. Клавиатура

Техника программирования

низкая

низкая

6. Неправильное сложение

Перебор, техника программирования

средняя

средняя

7. Числа

Динамическое программирование

средняя

высокая

8. Перестановки

Динамическое программирование

высокая

высокая

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

Задача 1. «Черно-белая графика»

Решение данной задачи в основном заключается в непосредственной аккуратной реализации операции, описанной в условии задачи. Для хранения заданной логической операции можно использовать массив целочисленного типа d[0..1,0..1], элемент которого d[i,j] хранит результат логической операции с первым аргументом i и вторым аргументом j. Таким образом, значение пиксела результата с координатами (x, y) будет равно d[a[x,y],b[x,y]], где a[1..h,1..w] и b[1..h,1..w] – целочисленные матрицы, хранящие исходные изображения.

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

Задача 2. «Газон»

Одно из возможных решений данной задачи заключается в следующем. Для каждой прямой, содержащей все пучки травы с равной координатой по оси абсцисс (аналогично можно рассматривать и ось ординат), найдем ее точки пересечения с окружностью, отображающей область действия поливальной установки, если, конечно, такие точки существуют. Получив данные точки, не сложно за время O(1) посчитать количество пучков травы на данной прямой одновременно и политых, и постриженных. Это делается с помощью операции вычисления целой части числа. Далее, просуммировав найденные числа для всех прямых, можно найти ответ на поставленную задачу.

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

Задача 3. «Трамвай»

Рассмотрим следующую идею решения данной задачи. Будем поддерживать два упорядоченных множества. В одно войдут пассажиры, которые в данный момент сидят, а в другое – пассажиры, которые стоят. Критерий упорядочения таков: i-й пассажир считается «меньше», чем j-й пассажир, если меньше, чем . Иными словами, самый «большой» пассажир получает больший, чем у остальных, прирост удовлетворения, если он из стоячего положения перейдет в сидячее.

Далее рассмотрим все события типа «пассажир вошел» или «пассажир вышел» в том порядке, в котором они происходят. Если пассажир вошел, то следует определить, будет ли он стоять или сидеть. При этом бессмысленно заставлять сидеть пассажира, если он любит стоять больше, чем сидеть. Если пассажир желает сесть и место для него еще есть, то его следует посадить, то есть, поместить во множество сидящих; иначе временно поместим его во множество сидящих и попросим встать самого «маленького» пассажира. Тем самым мы нанесем наименьший урон суммарной удовлетворенности.

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

Описанную логику можно реализовать с помощью нескольких различных алгоритмов, использующих структуры данных разной сложности. Достаточно эффективным является использование сбалансированных деревьев поиска для представления упорядоченных множеств пассажиров. С этими структурами данных время работы алгоритма составит . В эту оценку по времени включена сортировка событий по времени. Чуть более простым, но при существующих ограничениях не менее эффективным, является алгоритм, основанный на переборе остановок со списками входящих и выходящих на них пассажиров. Этот алгоритм имеет асимптотику .

Задача 4. «Треугольники»

Рассмотрим следующую идею решения данной задачи. Посчитаем количество равнобедренных треугольников с фиксированной вершиной, назовем ее B, противолежащей основанию. Для этого отсортируем все остальные точки по расстоянию до B. Пусть количество точек, расположенных на расстоянии равном d, есть q(d). Тогда искомое количество будет равно сумме по всем возможным d величины .

Заметим, что с помощью описанного алгоритма подсчитываются также и вырожденные треугольники, то есть отрезки прямых вида ABC, где |AB| = |BC|). Чтобы исключить их, необходимо при равных расстояниях до B отсортировать точки по полярному углу относительно B, а затем за один проход посчитать, сколько среди таких точек центрально-симметричных пар. Если вычесть это количество из полученного ответа, то получится искомый результат.

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

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

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

Задача 5. «Клавиатура»

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

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

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

Задача 6. «Неправильное сложение»

Простейшая идея решения данной задачи заключается в следующем. Необходимо перебрать три способа "неправильного" сложения заданных чисел: (a + b) + c, (a + c) + b, (b + c) + a. В основе этого лежит утверждение, что сложение двух чисел описанным в условии задачи методом обладает свойством ассоциативности. Перебор способов сложения чисел может осуществляться как рекурсивно на основе алгоритма перебора перестановок, так и основываться на перечислении вариантов расстановки чисел вручную в программном коде. Далее следует заметить, что сложение двух чисел осуществляется так же, как и сложение в столбик, но при этом надо помнить, что вместо переноса добавляется еще один разряд. В качестве примера ниже приведен фрагмент программы, реализующий вышесказанное.

ans := "";

while (a <> 0) or (b <> 0) do begin

ans := IntToStr(a mod 10 + b mod 10) + ans;

a := a div 10;

b := b div 10;

end;


Задача 7. «Числа»

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

Рекуррентная формула для связи ответов для подзадач составляется на основе того, что при переходе перебираются очередные символы, которые приписываются до тех пор, пока образуемое ими число не превышает C. Особо требуется рассмотреть случай, когда число начинается с 0.

Для вычисления ответов для подзадач необходимо использовать 64-битные типы данных, так как число из 18 цифр не представимо в рамках 32-битного типа данных.

Анализ показывает, что такой алгоритм работает за O(n log C).

Задача 8. «Перестановки»

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

Выберем в качестве состояния пару из подмножества P исходного множества S и номера выделенного элемента j в нем. Для каждого состояния будем хранить количество существующих k–перестановок из элементов данного подмножества P, но только таких перестановок, в которых последний элемент имеет номер j (в исходной нумерации). Начальное состояние в этом случае будет P=Ø. При программной реализации подмножество P удобно хранить с помощью битовых масок.

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

Описанные алгоритм имеет время работы O(m22m). Несмотря на то, что данное решение работает за экспоненциальное время, оно значительно быстрее простого перебора.

Страница из

Добавить документ в свой блог или на сайт

Похожие:

Методические рекомендации по решению предложенных олимпиадных задач iconМетодические рекомендации по разработке заданий для школьного и муниципального...
Методические материалы содержат рекомендации по порядку проведения олимпиад по экономике, требования к структуре и содержанию олимпиадных...
Методические рекомендации по решению предложенных олимпиадных задач iconМетодические рекомендации по разработке заданий для школьного и муниципального...
Методические материалы содержат рекомендации по порядку проведения школьного и муниципального этапов по химии, советы по содержанию...
Методические рекомендации по решению предложенных олимпиадных задач iconПояснительная записка Программа курса «Решение олимпиадных задач»
Программа курса «Решение олимпиадных задач» предназначена для учащихся 4-5 классов. Курс рассчитан на 35 учебных часа из расчета...
Методические рекомендации по решению предложенных олимпиадных задач iconМетодические рекомендации по решению ситуационных задач по предмету...
Сборник задач рассмотрен на методическом совете и рекомендован для использования в учебном процессе
Методические рекомендации по решению предложенных олимпиадных задач iconПрактикум по решению задач различной сложности. Цель программы
Для повышения квалификации учитель может выбрать любой из предложенных модулей (по 88 уч ч.)
Методические рекомендации по решению предложенных олимпиадных задач iconМетодические указания для выполнения курсовой работы по дисциплине «Физика»
В методических указаниях дана постановка заданий к курсовой работе, приведены основные особенности задач и методические рекомендации...
Методические рекомендации по решению предложенных олимпиадных задач iconМетодические рекомендации Барнаул 2005 Печатается по решению методического совета
...
Методические рекомендации по решению предложенных олимпиадных задач iconМетодические рекомендации по разработке заданий для школьного и муниципального...
Методические материалы содержат рекомендации по порядку проведения олимпиады по обществознанию, определения содержания и типов олимпиадных...
Методические рекомендации по решению предложенных олимпиадных задач iconМетодические указания по составлению уравнений к задачам и краткие...
Методические указания к решению задач – Улан-Удэ: Издательство;2007г. 25стр
Методические рекомендации по решению предложенных олимпиадных задач iconРешение олимпиадных задач на процентное содержание или концентрацию
Цель урока: показать учащимся применение «правила креста» при решении химических задач на смеси, растворы, сплавы
Методические рекомендации по решению предложенных олимпиадных задач iconМатематические методы и модели
Габрин К. Э., Математические методы и модели: Семестровое задание и методические рекомендации к решению задач. – Челябинск: Издательство...
Методические рекомендации по решению предложенных олимпиадных задач icon«Методические рекомендации обучения учащихся решению задач с кратким ответом. Текстовые задачи»
Успех любого экзамена зависит от многих факторов, но, прежде всего, от того, как Вы к нему подготовитесь. Это относится, конечно,...
Методические рекомендации по решению предложенных олимпиадных задач iconМетодические рекомендации по подготовке рефератов тема выбирается...
Прикладная и теоретическая механика в работах ученых Александрии (от Евклида до Паппа)
Методические рекомендации по решению предложенных олимпиадных задач iconМетодические рекомендации по подготовке рефератов тема выбирается...
Прикладная и теоретическая механика в работах ученых Александрии (от Евклида до Паппа)
Методические рекомендации по решению предложенных олимпиадных задач iconМетодические рекомендации по организации изучения дисциплины. Тематика...
Обучающая: проверить знания основных формул кинематики и учение их применять в новых условиях, обучение решению задач
Методические рекомендации по решению предложенных олимпиадных задач iconМетодические рекомендации по анализу и самоанализу урока (для студентов)...
Методические рекомендации предназначены для преподавателей и студентов педагогического колледжа


Школьные материалы


При копировании материала укажите ссылку © 2013
контакты
100-bal.ru
Поиск