有问题!!!很严重!
原题链接:85972.「2020-2021 集训队作业」Old Problem2026-10-19 20:50:28
发布于:浙江
c++代码如下
#include <iostream>
#include <vector>
#include <iomanip>
using namespace std;
const int MAXN = 600005;
double a[MAXN];
double pre[MAXN]; // 前缀积:pre[i] = ∏(1 - a[j]/x) 对于 j=1~i
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, q;
cin >> n >> q;
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
// 预处理前缀积(注意:x 在查询时才知道,所以不能直接预处理)
// 实际上需要存 a[i],查询时再计算
cout << fixed << setprecision(10);
while (q--) {
int l, r;
long long x;
cin >> l >> r >> x;
double prob_all_fail = 1.0;
for (int i = l; i <= r; i++) {
prob_all_fail *= (1.0 - (double)a[i] / x);
}
double ans = 1.0 - prob_all_fail;
cout << ans << "\n";
}
return 0;
}
Python代码如下(都运行不出来)
import sys
import math
# 加速输入
input = sys.stdin.readline
def main():
n, q = map(int, input().split())
a = list(map(int, input().split()))
# 预处理:log(1 - a[i])
log_pre = [0.0] * (n + 1)
for i in range(n):
log_pre[i + 1] = log_pre[i] + math.log(1.0 - a[i])
out = []
for _ in range(q):
l, r, x = map(int, input().split())
# 区间乘积 = exp(Σ log(1 - a[i]/x))
# = exp(Σ log(x - a[i]) - (r-l+1)*log(x))
sum_log = 0.0
for i in range(l - 1, r):
sum_log += math.log(x - a[i])
sum_log -= (r - l + 1) * math.log(x)
prob_all_fail = math.exp(sum_log)
ans = 1.0 - prob_all_fail
# 防止浮点误差
ans = max(0.0, min(1.0, ans))
out.append(f"{ans:.10f}")
print('\n'.join(out))
if __name__ == "__main__":
main()
点个赞呗~
谢谢了
这里空空如也















有帮助,赞一个