#C231104A. 构造题(squ)
标签(Label)
题目
题目详情 - 构造题(squ) - Super
题解 - 构造题(squ) - Super
代码
我的代码
#include<bits/stdc++.h>
#define For(i,l,r) for(int i=l;i<=r;i++)
#define Rof(i,l,r) for(int i=l;i>=r;i--)
using namespace std;
#define int long long
inline int input(){int x;return cin>>x,x;}
const int N = 3005;
int n,a[N];
signed main(){
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
freopen("squ.in","r",stdin);
freopen("squ.out","w",stdout);
cin>>n;
if(n==2) return cout<<"-1"<<'\n',0;
if(n==4) return cout<<"1 2 4 3\n4 3 1 2\n3 4 2 1\n2 1 3 4\n",0;
else if(n&1){
for(int i=0;i<n;i++) a[i]=i+1;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cout<<a[(i+j)%n]<<' ';
}cout<<'\n';
}
}else{
For(i,1,n-2) cout<<i<<' ';cout<<n<<' '<<n-1<<'\n';
For(i,0,n-2) a[i]=i+1;
For(i,1,n) a[i+n-2]=i;
for(int i=1,j=1;i<=n-2;i++,j++){
for(int k=0;k<=n-2;k++){
if(k==i-1) cout<<n<<' ';
else cout<<a[i+k]<<' ';
}cout<<a[i-1+i]<<'\n';
}
for(int i=2;i<=n-2;i+=2) cout<<i<<' ';
for(int i=1;i<=n-1;i+=2) cout<<i<<' ';
cout<<n<<'\n';
}
return 0;
}
题解代码
#include <bits/stdc++.h>
using namespace std;
const int N=303;
int a[N][N];
int main(){
freopen("squ.in","r",stdin);
freopen("squ.out","w",stdout);
int n;
cin>>n;
if(n%2==1){
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
a[i][j]=(i+j)%n;
}
}
}else{
for(int i=0;i<n-1;i++){
for(int j=0;j<n-1;j++){
a[i][j]=(i+j)%(n-1);
}
}
a[n-1][n-1]=n-1;
for(int i=0;i<n-1;i++){
int j=(i+n-2)%(n-1);
a[n-1][j]=a[i][n-1]=a[i][j];
a[i][j]=n-1;
}
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
printf("%d ",a[i][j]+1);
}
puts("");
}
}