题目
题解
五个数组分别记录五个阶段的成绩,数组模拟vector,在记录的同时更新最大人数。
输入结束,记录也结束;判断哪个阶段的人数等于记录的最大人数,就对哪个阶段的成绩进行排序。
因为是升序,所以手写个cmp函数。
我甜蜜的看错数据规模了,卡了巨久。
代码
// 太优美了!
#include<bits/stdc++.h>
using namespace std;
const int N = 1010;
int n, g, mx, cntA, cntB, cntC, cntD, cntE;
int gA[N], gB[N], gC[N], gD[N], gE[N];
bool cmp(int x, int y) { return x>y; }
int main()
{
cin>>n;
for(int i = 1;i <= n;i ++) {
cin>>g;
if(g>=90) gA[++cntA] = g, mx = max(mx, cntA);
else if(g>=80) gB[++cntB] = g, mx = max(mx, cntB);
else if(g>=70) gC[++cntC] = g, mx = max(mx, cntC);
else if(g>=60) gD[++cntD] = g, mx = max(mx, cntD);
else gE[++cntE] = g, mx = max(mx, cntE);
}
printf("%d %d %d %d %d\n%d\n", cntA, cntB, cntC, cntD, cntE, mx);
if(cntA == mx) { sort(gA+1, gA+mx+1, cmp); for(int i = 1;i <= mx;i ++) printf("%d ", gA[i]); }
else if(cntB == mx) { sort(gB+1, gB+mx+1, cmp); for(int i = 1;i <= mx;i ++) printf("%d ", gB[i]); }
else if(cntC == mx) { sort(gC+1, gC+mx+1, cmp); for(int i = 1;i <= mx;i ++) printf("%d ", gC[i]); }
else if(cntD == mx) { sort(gD+1, gD+mx+1, cmp); for(int i = 1;i <= mx;i ++) printf("%d ", gD[i]); }
else if(cntE == mx) { sort(gE+1, gE+mx+1, cmp); for(int i = 1;i <= mx;i ++) printf("%d ", gE[i]); }
return 0;
}