ENG  RUSTimus Online Judge
Online Judge
Задачи
Авторы
Соревнования
О системе
Часто задаваемые вопросы
Новости сайта
Форум
Ссылки
Архив задач
Отправить на проверку
Состояние проверки
Руководство
Регистрация
Исправить данные
Рейтинг авторов
Текущее соревнование
Расписание
Прошедшие соревнования
Правила
вернуться в форум

Обсуждение задачи 1060. Перевертыш

if WA9
Послано yuanyuan 7 май 2009 11:48
if WA9, try to check

wwww
wwww
wwwb
wwbb

ans=1

My solution:

program p1060;
type
  frr=array[0..5,0..5] of boolean;
var
  f:frr;
  ans:byte;
procedure init;
  var
    i,j:byte;
    ch:char;
  begin
    fillchar(f,sizeof(f),true);
    for i:=1 to 4 do
      begin
        for j:=1 to 4 do
          begin
            read(ch);
            if ch='b'
              then f[i,j]:=false;
          end;
        readln;
      end;
  end;
function check(f:frr):boolean;
  var
    b:boolean;
    i,j:byte;
  begin
    b:=f[1,1];
    for i:=1 to 4 do
      for j:=1 to 4 do
        if f[i,j]<>b
          then exit(false);
    exit(true);
  end;
function min(a,b:byte):byte;
  begin
    if a<b
      then exit(a)
      else exit(b);
  end;
procedure find(f:frr;x,y,t:byte);
  begin
    if check(f)
      then begin
             ans:=min(ans,t);
             exit;
           end;
    if x>4
      then exit;
    if y=4
      then find(f,x+1,1,t)
      else find(f,x,y+1,t);
    f[x,y]:=not(f[x,y]);
    f[x-1,y]:=not(f[x-1,y]);
    f[x+1,y]:=not(f[x+1,y]);
    f[x,y-1]:=not(f[x,y-1]);
    f[x,y+1]:=not(f[x,y+1]);
    if y=4
      then find(f,x+1,1,t+1)
      else find(f,x,y+1,t+1);
  end;
procedure outit;
  begin
    if ans=17
      then writeln('Impossible')
      else writeln(ans);
  end;
begin
  init;
  ans:=17;
  find(f,1,1,0);
  outit;
end.

Edited by author 07.05.2009 11:48

Edited by author 07.05.2009 11:49
Re: if WA9
Послано hehexiaobai 31 июл 2010 19:45
Yeah !!

Thank you very much;

I had tried many times.