#创人计划# 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;
}
该代码在递推计算 时使用了滚动数组的方法,大家可以学习一下。
全部评论 12
事实上我们可以通过事先预处理出1-1e9所有数的平方,这样虽然在复杂度上没有优化,但是可以适用于更多数,在多测的时候效率更高
1周前 来自 浙江
2是的
1周前 来自 广东
1
dalao%%%
最后基层循环为啥子1周前 来自 江西
1好吧绷不住了
1周前 来自 江西
1哈哈哈哈哈哈哈哈啊
1周前 来自 江西
1显然 是 的,递推更新一次是 的,所以总体来说是 的
1周前 来自 广东
1
绷不住了
1周前 来自 上海
1绷
1周前 来自 广东
135母獒前
1周前 来自 北京
1
开头公式有错误,若 ,结果应为 。
6天前 来自 江西
0这不是千年未解的世界难题吗
6天前 来自 广东
0
%%%
1周前 来自 湖南
0%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%orzdalao
1周前 来自 浙江
0666又写错了
1周前 来自 广东
0%%%
1周前 来自 广东
0笑点解析:公式推错了,现已修改
1周前 来自 广东
0hhh
1周前 来自 福建
0%%%
1周前 来自 广东
0d
1周前 来自 广东
0
有帮助,赞一个