题意:
一块N x N(1<=N<=10)正方形的黑白瓦片的图案要被转换成新的正方形图案。写一个程序来找出将原始图案按照以下列转换方法转换成新图案的最小方式:
1:转90度:图案按顺时针转90度。
2:转180度:图案按顺时针转180度。
3:转270度:图案按顺时针转270度。
4:反射:图案在水平方向翻转(以中央铅垂线为中心形成原图案的镜像)。
5:组合:图案在水平方向翻转,然后再按照1到3之间的一种再次转换。
6:不改变:原图案不改变。
7:无效转换:无法用以上方法得到新图案。
如果有多种可用的转换方法,请选择序号最小的那个。
只使用1--7中的一个步骤来完成这次转换。
题解:按题意每个试
代码:
/*
ID: lishicao
PROG: transform
LANG: C++
*/
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std ;
ifstream fin ( "transform.in" ) ;
ofstream fout ( "transform.out" ) ;
int N ;
char map[12][12] , trans[12][12] , temp[12][12] ;
bool check()
{
for( int i = 0 ; i < N ; i ++ )
for( int j = 0 ; j < N ; j ++ )
if( temp[i][j] != trans[i][j] ) return false ;
return true ;
}
void Rotation()
{
char tmp[12][12] ;
for( int i = 0 ; i < N ; i ++ )
for( int j = 0 ; j < N ; j ++ )
tmp[j][N-1-i] = temp[i][j] ;
for( int i = 0 ; i < N ; i ++ )
for( int j = 0 ; j < N ; j ++ )
temp[i][j] = tmp[i][j] ;
}
void Reflection()
{
char tmp[12][12] ;
for( int i = 0 ; i < N ; i ++ )
for( int j = 0 ; j < N ; j ++ )
tmp[i][N-1-j] = temp[i][j] ;
for( int i = 0 ; i < N ; i ++ )
for( int j = 0 ; j < N ; j ++ )
temp[i][j] = tmp[i][j] ;
}
int main()
{
int flag = 0 ;
char tmp[12][12] ;
fin >> N ;
for( int i = 0 ; i < N ; i ++ )
fin >> map[i] ;
for( int i = 0 ; i < N ; i ++ )
fin >> trans[i] ;
for( int i = 0 ; i < N ; i ++ )
for( int j = 0 ; j < N ; j ++ ) {
temp[i][j] = map[i][j] ;
tmp[i][j] = map[i][j] ;
}
// 1 2 3
for( int i = 1 ; i <= 3 ; i ++ ) {
Rotation() ;
if( !flag && check() )
{
flag = 1 ;
fout << i << endl ;
}
}
for( int i = 0 ; i < N ; i ++ )
for( int j = 0 ; j < N ; j ++ )
temp[i][j] = map[i][j] ;
// 4 5
Reflection() ;
if( !flag && check() )
{
flag = 1 ;
fout << 4 << endl ;
}
for( int i = 1 ; i <= 3 ; i ++ )
{
Rotation() ;
if( !flag && check() )
{
flag = 1 ;
fout << 5 << endl ;
}
}
for( int i = 0 ; i < N ; i ++ )
for( int j = 0 ; j < N ; j ++ )
temp[i][j] = map[i][j] ;
// 6
if( !flag && check() )
{
flag = 1 ;
fout << 6 << endl ;
}
// 7
if( !flag ) fout << 7 << endl ;
return 0 ;
}
分享到:
相关推荐
usaco5.2解题报告1
usaco2.1解题报告1
usaco2.3解题报告1
usaco1.3解题报告1
usaco2.4解题报告1
USACO题目Transformations(方块转换)及代码解析
usaco解题报告,就是usaco.training.gateway上面的题目全解
第一行应该包括一个正整数:子任务 A 第二行应该包括子任务 B 的解 第二问的要求是最少添加多少条有向边可以使得整张图任意一个学校有软件,其
本章主要衔接第二章,题目类型不定描述农民约翰被选为他们镇的镇长!他其中一个竞选承诺就是在镇上建立起互联网,并连接到所有的农场。当然,他需要你的帮助。约翰已经给他
1.歌曲必须按照创作的时间顺序在 CD 盘上出现 2.选中的歌曲数目尽可能地多 3.不仅同光盘上的歌曲写入时间要按顺序,前一张光盘上的歌曲不能比后一张
因为 10=2*5,所以每有一个 0 就有一对 2*5=10 出现,反之,如果这个数的质因数分解没有成对的 2,5,我们就可以简单的对 10 求模,而不用管前面
1.假设一个 nxn 的拉丁方在固定第一行和第一列的情况下的构造数目是 L[n],那 2.最后一行不用构造,如果搜索完 N-1 行,到达第 N 行,那么一定存在
第一行 优惠商品的种类数(0 ) 第二行..第 s+1 行 每一行都用几个整数来表示一种优惠方式 第一个整数 n 第一行: 两个用空格隔开的
3 5 6 4 2 1 3 5 7 6 4 2 3 5 4分析:先观察样例数据,如果把还没移动的那一步也算上,那么空格的位置为4 3 5 6 4 2 1 3 5
第二行到第 N+1 行: 每行有三个整数,Si, Ei, 和 Ci 第一个星期,农夫约翰随便地让 第一行 两个整数,N (0 ) 和 M
与第 4 章衔接引入凸包,DP 的单调思想加强。Fencing the Cows 圈奶牛译 by Felicia Crazy描述农夫约翰想要建造一个围栏用来围住
usaco 2005年比赛的解题报告以及测试数据
包括usaco2004年比赛的解题报告以及测试数据
包括usaco2003年比赛的解题报告及测试数据
包括usaco2003年比赛的解题报告及测试数据