POJ-3509-Rotating Rings

来源:互联网 发布:matlab mac安装教程 编辑:程序博客网 时间:2024/06/02 05:30

这个题是给你一个矩阵,让你判断该矩阵是否可经过每层转换,转换成标准矩阵。

思路:

逐层判断即可~算模拟吧~

代码:

#include<cstdio>#include<cstring>#include<iostream>using namespace std;const int maxn=1001;int a[maxn][maxn],b[maxn][maxn],numa[maxn*maxn],numb[maxn*maxn];int main(){    int n,cas=1;    while(scanf("%d",&n)&&n)    {for(int i=1;i<=n;i++)    for(int j=1;j<=n;j++)    {scanf("%d",&a[i][j]);b[i][j]=(i-1)*n+j;    }int ans=1;for(int c=1;c<=(n+1)/2;c++){    int k=1;    for(int i=c;i<=n+1-c;i++)    {numa[k]=a[c][i];numb[k++]=b[c][i];    }    for(int i=c+1;i<=n+1-c;i++)    {numa[k]=a[i][n+1-c];numb[k++]=b[i][n+1-c];    }    for(int i=n-c;i>=c;i--)    {numa[k]=a[n+1-c][i];numb[k++]=b[n+1-c][i];    }    for(int i=n-c;i>=c+1;i--)    {numa[k]=a[i][c];numb[k++]=b[i][c];    }    int st=0;    for(int i=1;i<k;i++)if(numa[i]==numb[1]){    st=i;    break;}    int cur=1;    for(int i=st;i<k;i++)    {if(numa[i]!=numb[cur++]){    ans=0;    break;}    }      for(int i=1;i<st;i++)    {if(numa[i]!=numb[cur++]){    ans=0;    break;}    }    if(!ans)break;}if(!ans)    printf("%d. NO\n",cas++);else    printf("%d. YES\n",cas++);    }    return 0;}