三分(划掉)一千万亿兆兆兆古戈尔 分算法
2026-08-13 16:30:05
发布于:天津
都知道二分算法,但是你知道一千万亿兆兆兆古戈尔分算法吗
//三体I里有一句话“别管什么鸡 八倒计时”
// 求最大值的一千万亿兆兆兆古戈尔分模板
double googol_search(double l, double r) {
const int ITERATIONS = 1; // 理论上1次迭代即可达到极致精度
for (int i = 0; i < ITERATIONS; ++i) {
// 计算10^(10^100)-1个分点的函数值(完全无法实际执行)
vector<double> f(10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000);
for (long long j = 1; j < 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000; ++j) {
double m = l + j * (r - l) / 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0;
f[j] = func(m);
}
// 找到最大值所在的区间(时间复杂度O(10^(10^100)),完全无法实际执行)
long long max_idx = 0;
for (long long j = 1; j < 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000; ++j) {
if (f[j] > f[max_idx]) {
max_idx = j;
}
}
// 缩小搜索范围
l = l + (max_idx-1) * (r - l) / 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0;
r = l + max_idx * (r - l) / 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0;
}
return (l + r) / 2;
}
全部评论 6
- 超大整数字面量很可能直接无法编译
- long long 根本无法作为这个规模的循环索引
- vector<double> 内存需求完全不可实现
- double 无法表示这种分割带来的精度
- 区间更新时先修改 l,导致 r 的公式错误
- 没有证明 func 是单峰/具有可搜索结构
- 没有采样右端点
- f[0] 不是 func(l),却拿它当初始最大值
- max_idx == 0 时会把区间往外扩
- 巨大 j 无法精确转换到 double
- 极大 N 转换成 double 可能直接变成 inf
- 大量不同 j 会映射到相同的 double m
2026-08-13 来自 浙江
1《三体I》
别管什么鸡八倒计时,......2026-08-13 来自 天津
1?
2026-08-13 来自 浙江
1zhende
2026-08-13 来自 天津
1
洛谷愚人节拿 分做法
2026-08-13 来自 浙江
1求求你了,给我几分吧
2026-08-13 来自 浙江
0给没看懂的解释一下,洛谷愚人节赛某题,使用几分算法可以得几分。比如二分得两分
2026-08-13 来自 浙江
0
hyw
2026-08-13 来自 广东
1那你分了个鸡毛、
2026-08-13 来自 浙江
1这个算法叫做枚举。俗称暴力
2026-08-13 来自 浙江
0暴力个鸡毛、
2026-08-13 来自 浙江
0
禁止多次顶
2026-08-13 来自 天津
16666666666666666666666666666666666666
1周前 来自 天津
0



































有帮助,赞一个