1 条题解
-
1
使用优先队列维护所有位置的球员,对于每个阵型,到优先队列里面取出对应的球员,并求平均值即可。具体细节见代码注释。
参考代码
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<queue> using namespace std; priority_queue<int> K, D, M, F; int k, d, m, f, q, a; int Q[100010]; int sd, sm, sf;//依次代表阵型每个位置的人的个数 int sK, sD, sM, sF;//每个阵的位置的总实力 int main() { //读入并放进优先队列里 scanf("%d%d%d%d", &k, &d, &m, &f); for (int i = 1; i <= k; i++) { scanf("%d", &a); K.push(a); } for (int i = 1; i <= d; i++) { scanf("%d", &a); D.push(a); } for (int i = 1; i <= m; i++) { scanf("%d", &a); M.push(a); } for (int i = 1; i <= f; i++) { scanf("%d", &a); F.push(a); } scanf("%d", &q); for (int i = 1; i <= q; i++) { scanf("%d%d%d", &sd, &sm, &sf); sK = K.top(); K.pop();//取出并删除现存的实力最大的守门员 for (int j = 1; j <= sd; j++) { sD += D.top(); D.pop(); } for (int j = 1; j <= sm; j++) { sM += M.top(); M.pop(); } for (int j = 1; j <= sf; j++) { sF += F.top(); F.pop(); } //依次取出并删除其余位置现存的最大实力球员 printf("%.2f\n", (double)(sF + sM + sD + sK) / 11.0); //输出并清零 sK = sM = sD = sF = 0; } return 0; }
- 1
信息
- ID
- 723
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 1
- 标签
- (无)
- 递交数
- 32
- 已通过
- 26
- 上传者