给你一个 的矩阵,要求在每一个格子内填一个不超过 的正整数,使得每一行和每一列的数的平方和仍然是一个平方数。
。
降至了,构造矩阵等价于构造一行 和一列 ,每个格子 为 。
那么行列可以分开构造,并且行列等价,所以问题转化为了构造长度为 的整数数组 满足 且 是平方数。
这很简单,只需要构造
即可,代码如下:
// Problem: Square Table
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/CF417E
// Memory Limit: 250 MB
// Time Limit: 1000 ms
//
// Powered by CP Editor (https://cpeditor.org)
#include <iostream>
#include <cstdio>
using namespace std;
const int S=100005;
int n,m;
int a[S],b[S];
inline void slove(int n,int a[])
{
if(n==1) return a[1]=1,void();
for(int i=1;i<=n-1;i++) a[i]=4;
a[n]=4*n-5;
}
int main()
{
scanf("%d%d",&n,&m);
slove(n,a),slove(m,b);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++) printf("%d ",a[i]*b[j]);
printf("\n");
}
return 0;
}