USACO1.2_2★Transformations 方块转换

Posted cynchanpin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了USACO1.2_2★Transformations 方块转换相关的知识,希望对你有一定的参考价值。

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

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

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

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

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

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

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

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

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

仅仅使用1--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
@[email protected]
---
@@-
@[email protected]
@--
[email protected]

[编辑]SAMPLE OUTPUT

1


/*
ID: zwcwu52
PROG: transform
LANG: C++
*/

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

char blkSrc[10][10], blkDst[10][10];	//源方阵、目标方阵

int main()
{
    ofstream fout ("transform.out");
    ifstream fin ("transform.in");
   
	unsigned N;		//阶数
	unsigned num = 7;	//方案数字
	
	fin >> N;
	
	//读取源方阵
	for(unsigned i = 0; i < N; i++)
	{	for(unsigned j = 0; j < N; j++)
		{fin >> blkSrc[i][j];}
	}
	
	//读取目标方阵
	for(unsigned i = 0; i < N; i++)
	{	for(unsigned j = 0; j < N; j++)
		{fin >> blkDst[i][j];}
	}
	
	do 
	{
		bool b = true;		//b 标识是否全然符合
		
		//按方案1检測
		for(unsigned i = 0; i < N; i++)
		{	for(unsigned j = 0; j < N; j++)
			{
				if(blkSrc[i][j] != blkDst[j][N - i - 1])
				{
					b = false;
					break;
				}
			}
		}
		if(true == b)
		{
			num = 1;
			break;
		}
		
		
		//按方案2检測
		b = true;
		for(unsigned i = 0; i < N; i++)
		{	for(unsigned j = 0; j < N; j++)
			{
				if(blkSrc[i][j] != blkDst[N- i - 1][N - j - 1])
				{
					b = false;
					break;
				}
			}
		}
		if(true == b)
		{
			num = 2;
			break;
		}
		
		//按方案3检測
		b = true;
		for(unsigned i = 0; i < N; i++)
		{	for(unsigned j = 0; j < N; j++)
			{
				if(blkSrc[i][j] != blkDst[N- j - 1][i])
				{
					b = false;
					break;
				}
			}
		}
		if(true == b)
		{
			num = 3;
			break;
		}
		
		//按方案4检測
		b = true;
		for(unsigned i = 0; i < N; i++)
		{	for(unsigned j = 0; j < N; j++)
			{
				if(blkSrc[i][j] != blkDst[i][N - j - 1])
				{
					b = false;
					break;
				}
			}
		}
		if(true == b)
		{
			num = 4;
			break;
		}
		
		//按方案5检測
		b = true;
		for(unsigned i = 0; i < N; i++)
		{	for(unsigned j = 0; j < N; j++)
			{
				if(blkSrc[i][j] != blkDst[N - j - 1][N - i - 1])
				{
					b = false;
					break;
				}
			}
		}
		if(true == b)
		{
			num = 5;
			break;
		}
		
		//按方案5检測
		b = true;
		for(unsigned i = 0; i < N; i++)
		{	for(unsigned j = 0; j < N; j++)
			{
				if(blkSrc[i][j] != blkDst[N - i - 1][j])
				{
					b = false;
					break;
				}
			}
		}
		if(true == b)
		{
			num = 5;
			break;
		}
		
		//按方案5检測
		b = true;
		for(unsigned i = 0; i < N; i++)
		{	for(unsigned j = 0; j < N; j++)
			{
				if(blkSrc[i][j] != blkDst[j][i])
				{
					b = false;
					break;
				}
			}
		}
		if(true == b)
		{
			num = 5;
			break;
		}
		
		//按方案6检測
		b = true;
		for(unsigned i = 0; i < N; i++)
		{	for(unsigned j = 0; j < N; j++)
			{
				if(blkSrc[i][j] != blkDst[i][j])
				{
					b = false;
					break;
				}
			}
		}
		if(true == b)
		{
			num = 6;
			break;
		}
		
	}while(0);
	
	fout << num << endl;
	
    return 0;
}


以上是关于USACO1.2_2★Transformations 方块转换的主要内容,如果未能解决你的问题,请参考以下文章

洛谷P1206 [USACO1.2]回文平方数 Palindromic Squares

洛谷P1204 [USACO1.2]挤牛奶Milking Cows

洛谷P1207 [USACO1.2]双重回文数 Dual Palindromes

洛谷 P1207 [USACO1.2]双重回文数 Dual Palindromes

题解Luogu P1204 [USACO1.2]挤牛奶Milking Cows

[USACO1.2]挤牛奶Milking Cows