CodeForces 417E Square Table (暴力|随机)

题意:给出长方形的长和宽,要让每一行(列)所有元素的平方和是平方数。

题解:暴力|随机
考虑长方形的分布规律。
假设2x2,设a为任意数,可以得到如下的解法:
a a
a a
继续扩容到3x3,发现奇数的行数或列数,相同数字无法保证,故可得如下解法:
a a b
a a b
b b d
若行列不同,则继续新增变量:
a a b
a a b
c c d
这样就得到了长方形的分布规律,暴力枚举或随机生成即可。

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
#include<queue>
#include<stack>
#include<cmath>
#include<vector>
#include<fstream>
#include<set>
#include<map>
#include<sstream>
#include<iomanip>
#define ll long long
using namespace std;
int n, m, sq[1111111];
int main() {
	for (int i = 1; i <= 1000; i++) sq[i * i] = 1;
	int i, j, k, h, flag = 0;
	scanf("%d%d", &n, &m);
	for (i = 1; i <= 100; i++) {
		for (j = 1; j <= 100; j++) {
			for (k = 1; k <= 100; k++) {
				for (h = 1; h <= 100; h++) {
					int a = (m - 1) * i * i + j * j;
					int b = (n - 1) * i * i + k * k;
					int c = (m - 1) * k * k + h * h;
					int d = (n - 1) * j * j + h * h;
					if (sq[a] && sq[b] && sq[c] && sq[d]) {
						flag = 1;
						break;
					}
				}
				if (flag) break;
			}
			if (flag) break;
		}
		if (flag) break;
	}
	for (int x = 1; x <= n - 1; x++) {
		for (int y = 1; y <= m - 1; y++) {
			printf("%d ", i);
		}
		printf("%d\n", j);
	}
	for (int x = 1; x <= m - 1; x++) printf("%d ", k);
	printf("%d\n", h);
	return 0;
}
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 像素格子 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读