
题意:
n*n的方阵中至少包含1~2*n一次,且仅有一个子矩阵四个角互不相等。
思路:
让方阵的四个角互不相同,第一行互不相同,这就用了n个数了,第一列也互不相等,这就用了2*n-1个数了,因为方阵四个角互不相同,再加上右下角的数,这就用够了2*n个数了,最后一行其他位置的和第一行相同,其他行上的数和这一行第一个数相同。
#include <iostream>
#include <vector>
using namespace std;
#define int long long
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
int n;cin>>n;
cout<<"YES"<<endl;
vector<vector<int>> a(n, vector<int>(n));
a[0][0]=1,a[0][n-1]=2,a[n-1][0]=3,a[n-1][n-1]=4;
int d=5;
for(int j=1;j<n-1;j++)
{
a[0][j]=d;
d++;
}
for(int i=1;i<n-1;i++)
{
for(int j=0;j<n;j++)
{
a[i][j]=d;
}
d++;
}
for(int i=1;i<n-1;i++)
{
a[n-1][i]=a[0][i];
}
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
cout<<a[i][j]<<" ";
}
cout<<endl;
}
return 0;
}


