printЗадачи командного чемпионата

printF. Стратегия для игры

Ограничения: время – 2s/4s, память – 64MiB Ввод: input.txt или стандартный ввод Вывод: output.txt или стандартный вывод copy
Послать решение Blockly Посылки Темы Где Обсудить (0)

В одной из книг Вася Пупкин обнаружил описание следующей игры. Игра начинается с ввода человеком последовательности прописных латинских букв – начального слова. Компьютер может выбрать, кто будет ходить первым: человек или компьютер. Затем игроки ходят по очереди. На каждом ходе игрок должен выбрать одно из слов, получившихся на предыдущем шаге и заменить одну из его букв на пробел. Пробелами заменяются также все остальные буквы в слове, совпадающие с выбранной. В результате слово может либо исчезнуть совсем, либо разбиться появившимися пробелами на несколько слов. Если игрок не может сделать свой очередной ход (не осталось слов), он проигрывает.
Вася решил написать программу для этой игры, и даже реализовал интерфейс, но он не смог придумать беспроигрышную стратегию для компьютера и обратился за помощью к вашей команде. Вы должны написать подпрограмму с именем game, которой передается строка `s` с начальным словом, заданным человеком.
void game(char *s); // С/С++
procedure game(var s:string); // Pascal
Для выполнения хода ваша подпрограмма должна вызывать подпрограмму robot с номером слова (нумерация слов начинается с 1) и выбранной буквой в этом слове.
void robot(int w, char c); // С/С++
procedure robot(w:integer; c:char); // Pascal
Эта подпрограмма делает все необходимые изменения в строке `s`, вводит ход человека и опять изменяет строку. После возврата из подпрограммы строка `s` будет изменена по результатам двух ходов. Если человек не может сделать ход, подпрограмма robot завершает выполнение программы. В случае, если компьютер не может сделать ход, вы должны выйти из подпрограммы game. Если первый ход должен сделать человек, а не компьютер, то для выполнения хода человеком нужно вызвать подпрограмму human без параметров.
void human(); // С/С++
procedure human; // Pascal
Длина начального слова не превышает 100 букв. Пересылаемое на проверку решение должно содержать только подпрограмму game, вспомогательные функции, команды #include (в C/C++) и глобальные переменные. В подпрограммах не должен выполняться ввод или вывод.
Пример подпрограммы на C/C++
void game(char *s)
{ int i=0;
  if(rand()%2)
    human();
  while(s[i])
  {
    if(s[i]!=' ')
      robot(1,s[i]);
    ++i;
  }
}
Пример подпрограммы на Pascal
procedure game(var s:string);
var i:integer;
begin
  if length(s) mod 2=0 then
    human;
  i:=1;
  while i<=length(s) do
    if s[i]=' ' then
      inc(i)
    else
      robot(1,s[i]);
end;
loading