Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 1707 | Accepted: 650 |
Description
| |||||||||||||||||||||||||
Figure (a) | |||||||||||||||||||||||||
| |||||||||||||||||||||||||
Figure (b) | |||||||||||||||||||||||||
| |||||||||||||||||||||||||
Figure (c) |
Input
Your program will be tested on one or more test cases. The first input line of a test case is an integer N which is the size of the grid. N input lines will follow, each line made of N integer values specifying the values in the grid in a row-major order. Note than 0 < N ≤ 1,000 and grid values are natural numbers less than or equal to 1,000,000.
The end of the test cases is identified with a dummy test case with N = 0.
Output
For each test case, output the result on a single line using the following format:
k. result
Where k is the test case number (starting at 1), and result is "YES" or "NO" (without the double quotes.)
Sample Input
4 9 5 1 2 13 7 11 3 14 6 10 4 15 16 12 8 3 1 2 3 5 6 7 8 9 4 0
Sample Output
1. YES 2. NO
题意:给定一个矩阵,问能否由类似b图每一层旋转得到。
#include<iostream> #include<stdio.h> #include<string.h> #include<cmath> using namespace std; int map[1105][1105],map1[1105][1105]; int a[50000],b[50000]; int main() { int n; int cas=1; while(scanf("%d",&n)) { if(n==0)break; for(int i=1; i<=n; i++) for(int j=1; j<=n; j++) { map[i][j]=(i-1)*n+j; scanf("%d",&map1[i][j]); } int ceng=(n+1)/2; int flag=0; for(int k=1; k<=ceng; k++) { int l=0; for(int i=k; i<n+1-k; i++) { a[l]=map[k][i]; b[l]=map1[k][i]; l++; } for(int i=k; i<=n+1-k; i++) { a[l]=map[i][n+1-k]; b[l]=map1[i][n+1-k]; l++; } for(int i=n-k; i>=k; i--) { a[l]=map[n+1-k][i]; b[l]=map1[n+1-k][i]; l++; } for(int i=n-k; i>k; i--) { a[l]=map[i][k]; b[l]=map1[i][k]; l++; } int index=0; for(int i=0; i<l; i++) { if(a[i]==b[0]) { index=i; break; } } int j=0; for(int i=index; i<l; i++) if(a[i]!=b[j++]) { flag=1; break; } if(!flag) { for(int i=0; i<index; i++) if(a[i]!=b[j++]) { flag=1; break; } } /*for(int i=0; i<l; i++) cout<<a[i]<<" "; cout<<endl; for(int i=0; i<l; i++) cout<<b[i]<<" "; cout<<endl;*/ } if(!flag) cout<<cas++<<". YES"<<endl; else cout<<cas++<<". NO"<<endl; } return 0; }