题解 P4086 【[USACO17DEC]My Cow Ate My Homework】

SuperJvRuo

2018-01-22 18:31:09

Solution

只需要注意实数运算的一些问题(如精度)即可AC ```cpp #include<cstdio> #include<cctype> #define EPS 1e-6 //实数比较大小,要带EPS inline int Read()//快读 { int x = 0;char c = getchar(); while(!isdigit(c)) c = getchar(); while(isdigit(c)) { x = (x << 3) + (x << 1) + c - '0'; c = getchar(); } return x; } double score[100005], minn[100005], grade[100005], maxn=0.0, sum=0.0; int main() { int n=Read(); for (int i = 1; i <= n; ++i) { score[i] = Read();//记录每道题的得分 sum += score[i];//预处理得分总和 } minn[n] = score[n]; for (int i = n - 1; i; --i) minn[i] = score[i] < minn[i + 1] ? score[i] : minn[i + 1]; //minn数组代表[i,n]区间内的最低分 for (int i = 1; i <= n - 2; ++i) { sum -= score[i]; //此时的sum为[i + 1, n]区间内的分数和 grade[i] = (sum - minn[i + 1]) / (double)(n - i - 1); maxn = grade[i] > maxn ? grade[i] : maxn; //maxn代表最高平均得分 } for (int i = 1; i <= n - 2; ++i) { if (maxn - grade[i] < EPS && maxn - grade[i] > - EPS) //即maxn==grade[i] printf("%d\n", i); } return 0; } ```