USACO1.2 Transformations(transform)

        本题思路清晰,只需按顺序对每种方法进行验证,一旦符合就不再往下运算,输出ans即可。

 

/*
ID:jzzlee1
PROG:transform
LANG:C++
*/
#include <fstream>
#include <string>
#include<iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
ifstream fin("transform.in");
ofstream fout("transform.out");
int main()
{
	char a[11][11],b[11][11],c[11][11],d[11][11],ch;
	int n;int i,j;int ans=7;
	fin>>n;
	for(i=0;i!=n;i++)
		fin>>a[i];
	for(i=0;i!=n;i++)
		fin>>b[i];
	bool flag=1;
	//case 1  ************************************************
	for(i=0;i!=n;i++)
		for(j=0;j!=n;j++)
			c[j][n-1-i]=a[i][j];
	for(i=0;flag&&i!=n;i++)
		for(j=0;flag&&j!=n;j++)
			if(c[i][j]!=b[i][j])
				flag=0;
	if(flag)
	{
		ans=1;
		goto line;
	}
	else flag=1;
	//case 2  **********************************************
	for(i=0;i!=n;i++)
		for(j=0;j!=n;j++)
			c[n-i-1][n-1-j]=a[i][j];
	for(i=0;flag&&i!=n;i++)
		for(j=0;flag&&j!=n;j++)
			if(c[i][j]!=b[i][j])
				flag=0;
	if(flag)
	{
		ans=2;
		goto line;
	}
	else flag=1;
	//case 3  *****************************************
	for(i=0;i!=n;i++)
		for(j=0;j!=n;j++)
			c[n-j-1][i]=a[i][j];
	for(i=0;flag&&i!=n;i++)
		for(j=0;flag&&j!=n;j++)
			if(c[i][j]!=b[i][j])
				flag=0;
	if(flag)
	{
		ans=3;
		goto line;
	}
	else flag=1;
	//case 4  ***************************************
	for(i=0;i!=n;i++)
		for(j=0;j!=n;j++)
			c[i][n-1-j]=a[i][j];
	for(i=0;flag&&i!=n;i++)
		for(j=0;flag&&j!=n;j++)
			if(c[i][j]!=b[i][j])
				flag=0;
	if(flag)
	{
		ans=4;
		goto line;
	}
	else flag=1;
	//case 5.1  ********************************
	for(i=0;i!=n;i++)
		for(j=0;j!=n;j++)
			d[j][n-1-i]=c[i][j];
	cout<<endl;
	for(i=0;flag&&i!=n;i++)
		for(j=0;flag&&j!=n;j++)
			if(d[i][j]!=b[i][j])
				flag=0;
	if(flag)
	{
		ans=5;
		goto line;
	}
	else flag=1;
	//case  5.2  ******************************
	for(i=0;i!=n;i++)
		for(j=0;j!=n;j++)
			d[n-i-1][n-1-j]=c[i][j];
	for(i=0;flag&&i!=n;i++)
		for(j=0;flag&&j!=n;j++)
			if(d[i][j]!=b[i][j])
				flag=0;
	if(flag)
	{
		ans=5;
		goto line;
	}
	else flag=1;
	//case 5.3  ***********************************
	for(i=0;i!=n;i++)
		for(j=0;j!=n;j++)
			d[n-j-1][i]=c[i][j];
	for(i=0;flag&&i!=n;i++)
		for(j=0;flag&&j!=n;j++)
			if(d[i][j]!=b[i][j])
				flag=0;
	if(flag)
	{
		ans=5;
		goto line;
	}
	else flag=1;
	//case 6  ******************************
	for(i=0;flag&&i!=n;i++)
		for(j=0;flag&&j!=n;j++)
			if(a[i][j]!=b[i][j])
				flag=0;
	if(flag)
	{
		ans=6;
		goto line;
	}
line:fout<<ans<<endl;
	return 0;
}

你可能感兴趣的:(USACO)