USACO Section 1.2 Transformations

北航复试题是此题的简化,如果不是文件操作这题早就过了

/*
 ID:linyvxi1
 LANG:C++
 TASK:transform
*/
//#include <stdio.h>
//#include <iostream>
#include <fstream>
#include <string.h>
using namespace std;
int N;
char mat1[11][11],mat2[11][11];
char mat3[11][11];
bool degree_90()
{
	int i,j;
	for(i=1;i<=N;i++){
		for(j=1;j<=N;j++)
			if(mat1[i][j]!=mat2[j][N-i+1])
				return false;
	}
	return true;
}

bool degree_180()
{
	int i,j;
	for(i=1;i<=N;i++)
		for(j=1;j<=N;j++)
			if(mat1[i][j]!=mat2[N-i+1][N-j+1])
				return false;
	return true;
}

bool degree_270()
{
	int i,j;
	for(i=1;i<=N;i++)
		for(j=1;j<=N;j++)
			if(mat1[i][j]!=mat2[N-j+1][i])
				return	false;
	return true;
}

bool same()
{
	int i,j;
	for(i=1;i<=N;i++)
		for(j=1;j<=N;j++)
			if(mat1[i][j]!=mat2[i][j])
				return false;
	return true;
}

bool refle()
{
	int i,j;
	if(N%2==0){
		for(i=1;i<=N;i++)
			for(j=1;j<=N/2;j++)
				if(mat1[i][j]!=mat2[i][N-j+1])
					return	false;
		return true;
	}
	else{
		for(i=1;i<=N;i++)
			if(mat1[i][N/2+1]!=mat2[i][N/2+1])
				return false;
		for(i=1;i<=N;i++)
			for(j=1;j<=N/2;j++)
				if(mat1[i][j]!=mat2[i][N-j+1])
					return false;
		return true;
	}
	return false;
}

bool f()
{
	int i,j;
	for(i=1;i<=N;i++){
			for(j=1;j<=N;j++)
				mat3[i][j]=mat1[i][N-j+1];
	}
	for(i=1;i<=N;i++)
		for(j=1;j<=N;j++)
			mat1[i][j]=mat3[i][j];
}


int main()
{
//	FILE*	fin=fopen("transform.in","r");
//	FILE*	fout=fopen("transform.out","w");
	ifstream fin("transform.in");
	int meth=7;
//	fscanf(fin,"%d",&N);
	fin>>N;
//	scanf("%d",&N);
	int i,j;
	char temp;
//	getchar();
	for(i=1;i<=N;i++){
		//fscanf(fin,"%c",&temp);
		for(j=1;j<=N;j++)
		//	fscanf(fin,"%c",&mat1[i][j]);
		fin>>mat1[i][j];
//		scanf("%c",&mat1[i][j]);
	}
	for(i=1;i<=N;i++){
//		fscanf(fin,"%c",&temp);
		for(j=1;j<=N;j++)
//			fscanf(fin,"%c",&mat2[i][j]);
		fin>>mat2[i][j];
		//scanf("%c",&mat2[i][j]);
	}
	if(degree_90())
		meth=1;
	else if(degree_180())
		meth=2;
	else if(degree_270())
		meth=3;
	else if(refle())
		meth=4;
	else if(same())
		meth=6;
	else{
		f();
		if(degree_90()||degree_180()||degree_270())
			meth=5;
	}
	ofstream fout("transform.out");
	fout<<meth<<endl;
	fout.close();
}

依然给出测试数据

Here are the test data inputs:

------- test 1 ----
3
---
---
---
---
-@-
---
------- test 2 ----
5
-@@@-
-@@--
-@---
-----
-----
-----
----@
---@@
--@@@
-----
------- test 3 ----
5
@@@@@
@---@
@@@@@
@@@@@
@@@@@
@@@@@
@@@@@
@@@@@
@---@
@@@@@
------- test 4 ----
6
-@-@-@
@-@-@-
-@-@-@
@-@-@-
-@-@-@
@-@-@-
@-@-@-
-@-@-@
@-@-@-
-@-@-@
@-@-@-
-@-@-@
------- test 5 ----
3
@@@
---
@@@
@@@
---
@@@
------- test 6 ----
4
@@@@
@@@@
-@@@
@@@@
@@@@
@@@@
@@@-
@@@@
------- test 7 ----
4
@-@@
@@@@
@@@@
@@@@
@@@@
@@@@
@@@@
@-@@
------- test 8 ----
10
@--------@
----------
----------
----------
----------
----------
----------
----------
----------
----------
@---------
----------
----------
----------
----------
----------
----------
----------
----------
---------@

posted @ 2011-10-27 12:47  linyvxiang  阅读(157)  评论(0编辑  收藏  举报