牛客Another Distinct Values

匿名 (未验证) 提交于 2019-12-02 22:56:40

题目

我一开始试了一下n=3,发现不行,于是就猜测只有2可以,交了一发,通过了50%。所以我猜测只有偶数可以,奇数都不行。

中间空白部分放n=2的情况就行。因为n=2的情况时,最大只有2,所以我们可以放心地用3,4。我们可以发现,一个图里既然有了n,那么最小一定是-n+1,而不是-n,所以外圈放两个最大的n,n-1,两个最小的,-n+1,-n+2,其他排都是0,这样就可以在空的部分放n=n-2时的情况了,不断递归就行。

比如n=4的完整的图是

再比如6的时候,也是如此。

#include<iostream> using namespace std; int a[201][201]; int N; int k; void dfs(int n) {     for(int i=k;i<=N-k+1;i++){         for(int j=k*2-1;j<=N;j++){             a[i][j]=-1;         }     }     for(int j=k*2-1;j<=N;j++){         a[k][j]=1;     }     for(int i=k;i<N-k+1;i++){         a[i][k*2-1]=1;     }     a[N-k+1][k*2-1]=0;     k++;     if(n==2)return;     dfs(n-2); } int main() {     int t;     cin>>t;     while(t--){         cin>>N;         if(N%2==1)cout<<"impossible"<<endl;         else{                 cout<<"possible"<<endl;                 k=1;                 dfs(N);                 for(int i=1;i<=N;i++){                     for(int j=1;j<=N;j++){                         cout<<a[i][j]<<" ";                     }                     cout<<endl;                 }         }     }     return 0; }
View Code

其实应该是想到是规律的了,没有很好的依据n=2的这个条件有利的展开,

原文:https://www.cnblogs.com/shuaihui520/p/9388279.html

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!