其他分享
首页 > 其他分享> > Codeforces Round #719 (Div. 3) C. Not Adjacent Matrix

Codeforces Round #719 (Div. 3) C. Not Adjacent Matrix

作者:互联网

一、写在前面

按说这就是一道典型的构造题。但是由于参赛经验不足,自己又去多想能否用枚举,甚至dfs等做法来做,而忽略了数据范围的问题,导致最后没有完成这道题。

二、算法分析

参赛时就想到了按奇数和偶数构造。因为要求差1,那么我们按照先填奇数再填偶数的策略来做,这样可以保证奇数的部分左右相邻至少差1,偶数部分同理。考虑上下相邻,更是差$2*n$。那么就只用考虑衔接处即可,这里有个巧妙的方式就是奇数和偶数都从小到大排列,这样衔接处差距最大。只有2这个特例无法构造,输出-1即可

三、代码

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<cstdio>
 4 #include<cstring>
 5 using namespace std;
 6 const int N=105;
 7 int G[N][N];
 8 int n;
 9 int cnt=0;                                     //记录输出了多少个数,用于控制换行
10 void enter(){                                  //控制换行的函数
11     cnt++;
12     if(cnt%n==0) cout<<endl;
13 }
14 void solve(){
15     
16     for(int i=0;i<=n*n/2-1;i++){
17         cout<<i*2+1<<' ';
18         enter();
19     }
20     if(n%2){
21         cout<<n*n<<' ';
22         enter();
23     }
24     for(int i=1;i<=n*n/2;i++){
25         cout<<i*2<<' ';
26         enter();
27     }
28     /*if(n%2==0){
29         cout<<n*n<<' ';
30         enter();
31     }*/
32 }
33 int main(){
34     
35     int T;
36     cin>>T;
37     while(T--){
38         cin>>n;
39         if(n==1) cout<<1<<endl;
40         else if(n==2) cout<<-1<<endl;
41         else solve();
42     }
43     
44     
45     
46     
47     return 0;
48     
49 }

 

标签:cnt,Matrix,719,奇数,int,Codeforces,偶数,include,cout
来源: https://www.cnblogs.com/talk-sea/p/14748758.html