INFOMAN брой 7
{
Решение на задача 4 за 1998г. от задочния конкурс по
информатика на сп. Computer. Автор: Светлин Наков, В.Търново
--------------------------------------------------------------
Дадена е лента, разграфена на N клетки. Двама играчи A и B играят чрез
последователни ходове игра, при която на всеки ход съответният играч зачер-
тава най-много K съседни клетки, които дотогава са били незачертани. Пече-
ли играчът, който направи последния ход. Напишете програма, която при даде-
ни N и K определя дали съществува печеливша стратегия за играча A който за-
почва първи играта.
РЕШЕНИЕ: Печелившата стратегия на първия играч при първия ход да разде-
ли лентата на две еднакви части. След това каквото и да играе пртивникът B,
първият играч играе симетрично. Той винаги може да играе симетрично,защото
при първия ход е разделил лентата на две еднакви части и когато играч B иг-
рае някакъв ход в едната част, играч A може да играе симетричен ход в дру-
гата част. Ако първия играч на първия ход не може да играе така, че да раз-
дели дъската на две еднакви части, той губи играта и няма печеливша страте-
гия. Това е възможно единствено при K=1 и N четно число. Тогава изходът е
предопределен. Ако K > 1, винаги играч A печели, защото той винаги може да
зачертае една или две клетки (1 при нечетно N и 2 при четно N) от средата
на лентата при което ленатата става на две еднакви ленти с по (N-1) div 2
клетки. Тогава каквото и да играе играч B, играч A винаги ще може да играе
същия ход симетрично - на другата част от лентата. Това означава, че след
всеки ход на B играч A има ход, който да играе. И понеже клетките са краен
брой, то в един момент играч B няма да има какво да играе и ще загуби игра-
та. Играч A не може да загуби, след всеки ход на B той имам какво да играе
и затова е сигурно, че той ще направи последния ход. При K=1 играта зависи
само от четността на N, понеже на всеки ход всеки играч трябва да зачертае
точно една клетка.
}
VAR N,K: longint;
BEGIN
Write('N='); ReadLn(N);
Write('K='); ReadLn(K);
if (K>1) or odd(N) then
WriteLn('Player A wins')
else
WriteLn('Player B wins');
END.