usaco 1.2:Transformations

本文介绍了一个算法,用于确定如何通过旋转、翻转等操作将一个NxN的黑白图案转换为另一个指定的图案。提供了具体的实现代码,并说明了各种转换方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

描述

一块N x N(1<=N<=10)正方形的黑白瓦片的图案要被转换成新的正方形图案。写一个程序来找出将原始图案按照以下列转换方法转换成新图案的最小方式:

1:转90度:图案按顺时针转90度。

2:转180度:图案按顺时针转180度。

3:转270度:图案按顺时针转270度。

4:反射:图案在水平方向翻转(以中央铅垂线为中心形成原图案的镜像)。

5:组合:图案在水平方向翻转,然后再按照1到3之间的一种再次转换。

6:不改变:原图案不改变。

7:无效转换:无法用以上方法得到新图案。

如果有多种可用的转换方法,请选择序号最小的那个。

 

 格式

PROGRAM NAME: transform

INPUT FORMAT:

(file transform.in)

第一行: 单独的一个整数N。

第二行到第N+1行: N行每行N个字符(不是“@”就是“-”);这是转换前的正方形。

第N+2行到第2*N+1行: N行每行N个字符(不是“@”就是“-”);这是转换后的正方形。

OUTPUT FORMAT:

(file transform.out)

单独的一行包括1到7之间的一个数字(在上文已描述)表明需要将转换前的正方形变为转换后的正方形的转换方法。

 SAMPLE INPUT

3

@—@

———

@@—

@—@

@——

——@

SAMPLE OUTPUT

1

 

这道题太蛋疼了,实在不想调了,可耻的直接交了标程。。

 

 

{
ID:gy_kw1
PROG:transform
LANG:PASCAL
}
var

    n,i,j:longint;
   bo: boolean;
   a,b,c,d:array[1..10,1..10]of char;
procedure zyz;

      begin
      for i:= 1 to n do
     for j:= 1 to n do
        if (b[i,j]<>c[i,j]) then bo:=false;
         end;
procedure g1;

   begin
     for i:= 1 to n do
      for j:= 1 to n do
       c[i,j]:=a[n+1-j,i];   zyz;
         if bo=true  then begin writeln('1'); halt; end else bo:=true;
       end;
procedure g2;

      begin
     for i:= 1 to n do
      for j:= 1 to n do
       c[i,j]:=a[n+1-i,n+1-j]; zyz;
         if bo=true  then begin writeln('2'); halt; end else bo:=true;
        end;
procedure g3;

      begin
     for i:= 1 to n do
      for j:= 1 to n do
      c[i,j]:=a[j,n+1-i];zyz;
         if bo=true  then begin writeln('3'); halt; end else bo:=true;
       end;
procedure g4;

      begin
     for i:= 1 to n do
      for j:= 1 to n do
      c[i,j]:=a[i,n+1-j];zyz;
        if bo=true  then begin writeln('4'); halt; end else bo:=true;
      end;
procedure g5;

       begin
       for i:= 1 to n do for j:= 1 to n do
      d[i,j]:=a[i,n+1-j];
      for i:= 1 to n do for j:= 1 to n do
       c[i,j]:=d[j,n+1-i];zyz;
        if bo=true  then begin  writeln('5'); halt; end
                    else begin bo:=true;
                    for i:= 1 to n do for j:= 1 to n do
                     c[i,j]:=d[n+1-i,n+1-j];zyz;
                      if bo=true  then begin  writeln('5'); halt; end
                     else begin bo:=true;
                     for i:= 1 to n do for j:= 1 to n do
                    c[i,j]:=d[n+1-j,i];zyz;
                     if bo=true  then begin  writeln('5');halt; end;end;end;
          end;
procedure g6;
      begin
      for i:= 1 to n do
      for j:= 1 to n do
      c[i,j]:=a[i,j];zyz;
        if bo=true  then begin writeln('6'); halt; end else bo:=true;
      end;
begin

   assign(input,'transform.in');
       reset(input);
       assign(output,'transform.out');
       rewrite(output);
       readln(n);
       for i:= 1 to n do begin for j:= 1 to n do
      read(a[i,j]);readln; end;
        for i:= 1 to n do begin for j:= 1 to n do
          read(b[i,j]);readln; end;
     bo:=true;
     g1;g2;g3;g4;g5;g6;
      writeln('7');
 close(input); close(output);
       end.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值