#创人计划# A+B 神秘恩方做法
2025-08-27 14:33:47
发布于:广东
注意到 。
我们使用累加方法求出 ,然后再将他它们一个一个加起来,注意到这个式子一定是整数,通过试根号来得出。
如何试根号:
将  从  枚举到 ,判断  是否等于  即可。
但是如果这样配上累加算乘法的话太慢了,时间复杂度是  的,需要优化。
注意到 。所以我们可以递推  求出。
这样就可以以  的复杂度完美地解决这个问题了。
在具体实现时记得开 long long。
附上代码:
#include <iostream>
#include <cstdio>
#define int long long
using namespace std;
signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0), cout.tie(0);
	int n, m;
	cin >> n >> m;
	int ans = 0;
	for(int i = 1; i <= n; i++) for(int j = 1; j <= n; j++) ans++;
	for(int i = 1; i <= n; i++) for(int j = 1; j <= m; j++) ans++;
	for(int i = 1; i <= n; i++) for(int j = 1; j <= m; j++) ans++;
	for(int i = 1; i <= m; i++) for(int j = 1; j <= m; j++) ans++;
	int cur = 0;
	for(int i = 1;; i++){
		for(int j = 1; j <= i; j++) cur++;
		for(int j = 1; j <= i; j++) cur++;
		cur--;
		if(cur == ans){
			cout << i;
			return 0;
		}
	}
	return 0;
}
该代码在递推计算 时使用了滚动数组的方法,大家可以学习一下。
全部评论 14
事实上我们可以通过事先预处理出1-1e9所有数的平方,这样虽然在复杂度上没有优化,但是可以适用于更多数,在多测的时候效率更高
2025-08-27 来自 浙江
2是的
2025-08-27 来自 广东
1
成功的把O(n)优化成了O(n2)
2025-09-14 来自 上海
1dalao%%%
最后基层循环为啥子2025-08-27 来自 江西
1好吧绷不住了
2025-08-27 来自 江西
1哈哈哈哈哈哈哈哈啊
2025-08-27 来自 江西
1显然 是 的,递推更新一次是 的,所以总体来说是 的
2025-08-27 来自 广东
1
绷不住了
2025-08-27 来自 上海
1绷
2025-08-27 来自 广东
135母獒前
2025-08-27 来自 北京
1
信竞生:没问题
数竞生:大大滴问题! 啊!2025-09-13 来自 上海
0%%%
2025-09-14 来自 广东
0
开头公式有错误,若 ,结果应为 。
2025-08-28 来自 江西
0这不是千年未解的世界难题吗



2025-08-28 来自 广东
0
%%%
2025-08-27 来自 湖南
0%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%orzdalao
2025-08-27 来自 浙江
0666又写错了
2025-08-27 来自 广东
0%%%
2025-08-27 来自 广东
0笑点解析:公式推错了,现已修改
2025-08-27 来自 广东
0hhh
2025-08-27 来自 福建
0%%%
2025-08-27 来自 广东
0d
2025-08-27 来自 广东
0





































有帮助,赞一个