#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
#define N 40000
#define M 100
#define K 5
struct student {
int id;
int ge;
int gi;
bool operator<(const student &b) const {
int t1 = ge+gi, t2 = b.ge+b.gi;
if(t1^t2)
return t1 > t2;
return ge > b.ge;
}
};
int main(int argc, char **argv) {
student stu[N];
vector<int> school[M];
int choice[N][K] = {{}};
int quota[M] = {};
int lastrank[M] = {};
int n, m, k;
cin >> n >> m >> k;
for(int i = 0; i < m; i ++) {
scanf("%d", "a[i]);
}
for(int i = 0; i < n; i ++) {
stu[i].id = i;
scanf("%d%d", &stu[i].ge, &stu[i].gi);
for(int j = 0; j < k; j ++) {
scanf("%d", &choice[i][j]);
}
}
sort(stu, stu+n);
int rank = 0;
for(int i = 0; i < n; i ++) {
const student &s = stu[i];
if((s.ge + s.gi) != (stu[rank].ge + stu[rank].gi) || s.ge != stu[rank].ge)
rank = i;
for(int j = 0; j < k; j ++) {
int c = choice[s.id][j];
if(school[c].size() < quota[c] || lastrank[c] == rank) {
school[c].push_back(s.id);
lastrank[c] = rank;
break;
}
}
}
for(int i = 0; i < m; i ++) {
if(school[i].size()) {
sort(school[i].begin(), school[i].end());
printf("%d", school[i][0]);
for(int j = 1; j < school[i].size(); j ++) {
printf(" %d", school[i][j]);
}
}
putchar('\n');
}
return 0;
}
1080. Graduate Admission (30)
最新推荐文章于 2022-06-21 21:50:19 发布