#include<cstdio>//AC
#include<vector>
#include<algorithm>
using namespace std;
struct node {
int id, g1, ave;
vector<int> sch;
};
int quote[110] = { 0 };
bool cmp(node a, node b) { return a.ave != b.ave ? a.ave > b.ave: a.g1 > b.g1; }
int main() {
int n, m, k, t;
scanf("%d%d%d", &n, &m, &k);
for (int i = 0; i < m; i++) {
scanf("%d", "e[i]);
}
vector<node> info(n), stu(n);
vector<int> sch[110];
for (int i = 0; i < n; i++) {
scanf("%d%d", &info[i].g1, &t);
info[i].id = i;
info[i].ave = info[i].g1 + t;
for (int j = 0; j < k; j++) {
scanf("%d", &t);
info[i].sch.push_back(t);
}
stu[i] = info[i];
}
sort(info.begin(), info.end(), cmp);
for (int i = 0; i < n; i++) {
for (int j = 0; j < k; j++) {
t = info[i].sch[j];
//int p = sch[t][sch[t].size() - 1];//sch[t].size()为0时会导致数组越界
if (quote[t] > 0||(info[i].ave == stu[sch[t][sch[t].size() - 1]].ave && info[i].g1 == stu[sch[t][sch[t].size() - 1]].g1)) {
//分清info与stu,stu数组下标即为id,在这里debug了好久
sch[t].push_back(info[i].id);
quote[t]--;
break;
}
}
}
for (int i = 0; i < m; i++) {
int len = sch[i].size();
sort(sch[i].begin(), sch[i].end());
for (int j = 0; j < len; j++) {
printf("%d", sch[i][j]);
if (j != len - 1) { printf(" "); }
}
printf("\n");
}
return 0;
}
1080 Graduate Admission (30分)
最新推荐文章于 2021-12-05 16:46:29 发布