【算法】【构造】

1 阅读1分钟

C. Nene's Magical Matrix

代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long
void so(){
	int n;cin>>n;
	int ans=0;
	for(int i=1;i<=n;i++)ans+=(2*i-1)*i;
	cout<<ans<<' '<<2*n<<'\n';
	for(int i=n;i>=1;i--){
		cout<<"1 "<<i<<' ';
		for(int j=1;j<=n;j++)cout<<j<<' ';cout<<'\n';
		cout<<"2 "<<i<<' ';
		for(int j=1;j<=n;j++)cout<<j<<' ';cout<<'\n';
	}
}
int main(){
	int t;cin>>t;
	while(t--){
		so();
	}
}

解析

由于他可以用其他的数盖住,那么n* n 的矩阵上会填2* n* n 次,每个数都填2 n次,最后1肯定会被填1次 看看n可不可以被填2 n次,看n最多可以占多少,发现n可以占的次数后,再看n-1,和n的规律其实是一样的,推测图形

为什么考虑交替,只要不交替,就会出现1234,1234无法形成那个形状,交替:每次构造合法的正方形