NC210773. 巨阵
描述
题面
输入描述
一个数 n ()
输出描述
第一行一个数表示最大巨格数
接下来 n 行输出大小为 n*n 的方阵
示例1
输入:
3
输出:
3 9 2 3 8 5 4 7 6 1
说明:
解释:易得左上、左下、右上 三个四元格是巨格C++11(clang++ 3.9) 解法, 执行用时: 82ms, 内存消耗: 17536K, 提交时间: 2020-10-18 08:13:44
#include<bits/stdc++.h> using namespace std; #define ll long long ll a[2000][1500]; int main() { ll i,j,k,l,n,m,t; cin>>n; ll ans=(n-1)+n/2*(n-2); if(n%2==1) { ans+=(n-2)/2; } ll cnt; for(i=1;i<=n;i++) { a[1][i]=i; } cnt=n; for(i=n;i>=1;i--) { if((n-i)%2==0) { for(j=2;j<=n;j++) { cnt++; a[j][i]=cnt; } } else { for(j=n;j>=2;j--) { cnt++; a[j][i]=cnt; } } } if(n>=3&&n%2==1) { cnt=n*n; for(j=2;j<=n;j++) { if(j%2==0) { a[j][1]=cnt; a[j][2]=cnt-1; } else { a[j][1]=cnt-1; a[j][2]=cnt; } cnt-=2; } } printf("%lld\n",ans); for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { printf("%lld" ,a[i][j]); if(j==n) printf("\n"); else printf(" "); } } }