NKOJ2317 英语四六级考试

  直接按公式算肯定会TLE,那么需要找其他办法。

  难点是如何不超时计算σ的值。实际上,σ计算式展开以后就是根号下xi的二次方的平均数减去xi平均数的二次方。那么只需要常模的前缀和数组与常模的平方的前缀和数组,那么对于每个询问即可快速算出常模的平均数与其平方的平均数。

 1 #include<iostream>
 2 #include<cmath>
 3 #include<vector>
 4 #include<cstdio>
 5 using namespace std;
 6 int main()
 7 {
 8     int n, q;
 9     scanf("%d%d", &n, &q);
10     vector<int> a(n+1),sum(n+1),sum2(n+1);
11     for (int i = 1; i <= n; ++i)
12     {
13         int A;
14         scanf("%d",&A);
15         a[i] = A;
16     }
17     for (int i = 1; i <= n; ++i)
18     {
19         sum[i] = sum[i - 1] + a[i];
20         sum2[i] = sum2[i - 1] + a[i] * a[i];
21     }
22     for (int i = 0; i < q; ++i)
23     {
24         int l, r;
25         scanf("%d%d", &l, &r);
26         double ave = (double)(sum[r] - sum[l - 1]) / (r - l + 1);
27         double ave2= (double)(sum2[r] - sum2[l - 1]) / (r - l + 1);
28         double sigma = sqrt(ave2 - ave*ave);
29         double result = -(double)75 / 70 * sigma + ave;
30         printf("%lf
", result);
31     }
32 }
View Code

  另外,这里如果用cin,cout而不用printf,scanf则会TLE。(屑开的评测机居然不支持ios::sync_with_stdio(false))

原文地址:https://www.cnblogs.com/Algorithm-X/p/7520906.html