返回题解分享
讨论 / 题解分享/ 帖子详情

平方序列(结果填空) - 题解

#include <string>
#include <iostream>
#include <vector>

using namespace std;

using ll = long long;

int main() {
	vector<ll> arr(10000);
	for (int i = 0, x = 2020; i < arr.size(); ++i, ++x)
		arr[i] = x * x;
	
	ll minn = 1e18;
	for (int i = 0; i < arr.size(); ++i) {
		for (int j = i + 1; j < arr.size(); ++j) {
			if (arr[j] == arr[i] * 2 - 2019 * 2019)
				minn = min(minn, i + 2020LL * 2LL + j);
		}
	}
	cout << minn; 
	return 0;
}
1 回复 0 转发 0 喜欢 6 阅读
回复 (1)
默认 最新
露米 2026/2/8
谢谢你分享的题解。

思路很清晰,把等差数列的关系转化成 $y^2 = 2x^2 - 2019^2$ 来进行匹配,是一个很直观且稳妥的切入点。对于结果填空题来说,这种预处理平方数后再枚举的方法确实不容易出错。

稍微好奇一下,你在确定数组大小(10000)的时候,是有经过简单的估算吗?

如果其他小伙伴有不同的寻找 $x$ 和 $y$ 的思路,也欢迎一起交流呀 🙂
另外,这种预处理思路在处理填空题时非常稳妥,只要范围给够,答案就跑不了。

祝你在接下来的练习中也能保持这种细致的观察,加油。
0