【USACO】transformations

{
ID: anniel11
PROG: transform
LANG: PASCAL
}
Program transform;
Var
    temp:boolean;
    c:char;
    i,j,n,sum,head,tail:longint;
    map1,map2:array[1..10,1..10] of boolean;
    f:array[0..100000,1..2] of integer;
    flag,flag2:boolean;
Begin
    fillchar(map1,sizeof(map1),false);
    fillchar(map2,sizeof(map2),false);
    Assign(input, 'transform.in'); reset(input);
    Assign(output, 'transform.out'); Rewrite(output);
    Readln(n);
    flag2:=false;
    for i:=1 to n do
    begin
        for j:=1 to n do
        begin
          read(c);
          if c='@' then map1[i,j]:=true;
        end;
        readln;
    end;
    for i:=1 to n do
    begin
        for j:=1 to n do
        begin
          read(c);
          if c='@' then map2[i,j]:=true;
        end;
        readln;
    end;

    //#1 i'=j j'=n-i+1
    flag:=true;
    for i:=1 to n do
    for j:=1 to n do
    if map2[i,j]<>map1[j,n-i+1] then
    begin
        flag:=false;
        break;
    end;
    if flag then writeln(1);
    if flag then flag2:=true;
    //#2 i`=n-i+1 j'=n-j+1
    flag:=true;
    for i:=1 to n do
    for j:=1 to n do
    if map2[i,j]<>map1[n-i+1,n-j+1] then
    begin
        flag:=false;
        break;
    end;
    if flag then writeln(2);
    if flag then flag2:=true;
    //#3 i'=n-j+1  j'=i
    flag:=true;
    for i:=1 to n do
    for j:=1 to n do
    if map2[i,j]<>map1[n-j+1,i] then
    begin
        flag:=false;
        break;
    end;
    if flag then writeln(3);
    if flag then flag2:=true;
    //#4 i'=i j'=n-j+1
    flag:=true;
    for i:=1 to n do
    for j:=1 to n do
    if map2[i,j]<>map1[i,n-j+1] then
    begin
        flag:=false;
        break;
    end;
    if flag then writeln(4);
    if flag then flag2:=true;
    //#5 #3 reflect right half
    flag:=true;
    for i:=1 to n do
    for j:=1 to n do
    begin
        if i<=n div 2 then
        if map2[i,j]<>map1[n-j+1,i] then
        begin
                flag:=false;
                break;
        end;

        if i>n div 2 then
        if map2[i,j]<>map1[j,n-i+1] then
        begin
                flag:=false;
                break;
        end;
    end;
    if flag then writeln(5);
    if flag then flag2:=true;
    //#6 i'=i j'=j
    flag:=true;
    for i:=1 to n do
    for j:=1 to n do
    if map2[i,j]<>map1[i,j] then
    begin
        flag:=false;
        break;
    end;
    if flag then writeln(6);
    if flag then flag2:=true;
    //#7
    if flag2=false then writeln(7);
    close(input);
    close(output);
End.

{
1 2 3 4
4 5 6 8
7 8 9 9
1 1 1 1
1,1 -> 1,3
1,2    2,3
1,3    3,3
2,1    1,2
2,2    2,2
2,3    3,2  }

 

posted @ 2014-09-11 15:28  OmegaIota  阅读(172)  评论(0编辑  收藏  举报