usaco 1.2:Transformations
2010-08-26 21:58
323 查看
描述
一块N x N(1<=N<=10)正方形的黑白瓦片的图案要被转换成新的正方形图案。写一个程序来找出将原始图案按照以下列转换方法转换成新图案的最小方式:
1:转90度:图案按顺时针转90度。
2:转180度:图案按顺时针转180度。
3:转270度:图案按顺时针转270度。
4:反射:图案在水平方向翻转(以中央铅垂线为中心形成原图案的镜像)。
5:组合:图案在水平方向翻转,然后再按照1到3之间的一种再次转换。
6:不改变:原图案不改变。
7:无效转换:无法用以上方法得到新图案。
如果有多种可用的转换方法,请选择序号最小的那个。
INPUT FORMAT:
(file transform.in)
第一行: 单独的一个整数N。
第二行到第N+1行: N行每行N个字符(不是“@”就是“-”);这是转换前的正方形。
第N+2行到第2*N+1行: N行每行N个字符(不是“@”就是“-”);这是转换后的正方形。
OUTPUT FORMAT:
(file transform.out)
单独的一行包括1到7之间的一个数字(在上文已描述)表明需要将转换前的正方形变为转换后的正方形的转换方法。
@—@
———
@@—
@—@
@——
——@
这道题太蛋疼了,实在不想调了,可耻的直接交了标程。。
{
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.
一块N x N(1<=N<=10)正方形的黑白瓦片的图案要被转换成新的正方形图案。写一个程序来找出将原始图案按照以下列转换方法转换成新图案的最小方式:
1:转90度:图案按顺时针转90度。
2:转180度:图案按顺时针转180度。
3:转270度:图案按顺时针转270度。
4:反射:图案在水平方向翻转(以中央铅垂线为中心形成原图案的镜像)。
5:组合:图案在水平方向翻转,然后再按照1到3之间的一种再次转换。
6:不改变:原图案不改变。
7:无效转换:无法用以上方法得到新图案。
如果有多种可用的转换方法,请选择序号最小的那个。
格式
PROGRAM NAME: transformINPUT 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.
相关文章推荐
- 【几何翻转】Transformations 方块转换(Usaco_Training 1.2)
- 【模拟】洛谷 P1205 [USACO1.2]方块转换 Transformations
- USACO-Section1.2 Transformations
- 洛谷 1205 [USACO1.2]方块转换 Transformations
- USACO-Section1.2 Transformations【数论.矩阵旋转】
- USACO 1.2-Transformations
- 【USACO-Chapter1-1.2】【模拟】Transformations
- USACO--1.2 Transformations
- USACO 1.2 Transformations(模拟)
- USACO 1.2 Transformations (用结构体来模拟)
- [USACO1.2]方块转换 Transformations
- USACO 1.2 Transformations (模拟)
- USACO Section1.2 Transformations
- USACO 1.2 Transformations (transform)
- USACO 1.2 - Transformations(暴力枚举)
- 【几何翻转】Transformations 方块转换(Usaco_Training 1.2)
- usaco 1.2 Transformations(模拟)
- usaco section1.2 Transformations
- USACO 1.2 Transformations
- USACO 1.2 Transformations