Олимпиадная информатика - 2010

Разбор и решение задач муниципального уровня 2010-11 года

Задача «Ладьи»

Рассмотрим количество способов расставить К ладей на доскеN х М так, чтобы никакие две их них не били друг друга. Обозначим это количество способов за А(N, М, К). Вам даны N и М. Найдите значение К при котором А(N, М, К) максимально. Входные данные Входной файл содержит числа N и М (1<N,M< 9). Выходные данные Выведите в выходной файл искомое К.

INPUT.TXT
3 3
OUTPUT.TXT
2

посмотреть текст программы здесь

Разбор задачи №4 "Ладьи"
предложено Песковым Аркадием Геннадьевичем, МОУ «Сюкеевская средняя общеобразовательная школа»

Камско-Устьинского муниципального района РТ

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

Ясно, что одну ладью можно поставить на любую клетку, при этом она никакой фигуре не угрожает, т.е. количество способов в этом случае совпадает с числом клеток и равно Nх М. Если количество фигур К более одной, то рассмотрим сначала доску размером NхК. Подобные задачи по комбинаторике встречаются в современных учебниках математики, начиная с 5 класса. Ясно, что в каждом из К строк должна стоять единственная ладья.

В первую строку ладью можно поставить N способами. Для каждого варианта один столбец под боем, и поставить ладью во вторую строку можно поставить только N-1 способом. Всего вариантов для расстановки 2 ладей в 2 рядах будет N(N-1). Для третьей строки остается N-2 вариантов, число способов N(N-1)(N-2) и т.д. Всего вариантов будет N(N-1)…(N-К+1). Найдём это число в цикле для от 1 до К.

Но ведь второй размер доски может быть и больше К.

В этом случае какие-то строки останутся пустыми. Для каждого варианта нужно будет учесть все возможные сочетания занятых и свободных строк, т.е. найденное нами число способов расстановки на доске NхК надо умножить на количество вариантов расположения на доске из M строк К занятых и M – К незанятых строк. Оно равно количеству чисел из отрезка [0; 2M -1] в двоичной записи которых содержится ровно К единиц. (Это К-значные двоичные числа с учётом лидирующих нулей, единица соответствует занятой строке, 0 –пустой).

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

Какие же значения может принимать К? Ясно, что оно не может быть больше меньшего из размеров доски. В противном случае по принципу Дирихле найдётся ряд, в котором расположены не менее 2 ладей, и они бьют друг друга.

Теперь ясно, каков будет алгоритм для решения всей задачи. Запросив размеры доски выберем из них меньший. За первоначальное значение способов расстановки возьмём число MxN – случай для одной ладьи. Затем в цикле для каждого значения от 2 до меньшего из размеров доски найдём число вариантов расстановки и сравним с хранимым эталоном. Если найденное значение больше – запоминаем новые значения числа способов и значение К.

Hosted by uCoz