#include<stdio.h>
#include<vector>
#include<algorithm>
using namespace std;
struct person{
int ge, gi;
int total;
int index;
int rank;
} app[40000],s[100];
int school[100];
vector<int>stu[40000];
vector<int>sch[100];
bool cmp(const struct person &a, const struct person &b){
if (a.total == b.total)
if (a.ge == b.ge)
return a.index < b.index;
else return a.ge > b.ge;
else return a.total > b.total;
}
int main(){
int NumOfApp, NumOfSch, NumOfCh;
freopen("1.in", "r", stdin);
scanf("%d%d%d", &NumOfApp, &NumOfSch, &NumOfCh);
int i,j,choice;
for (i = 0; i < NumOfSch; i++)
scanf("%d", &school[i]);
for (i = 0; i < NumOfApp; i++){
scanf("%d%d", &app[i].ge, &app[i].gi);
app[i].total = (app[i].ge + app[i].gi) / 2;
app[i].index = i;
for (j = 0; j < NumOfCh; j++)
{
scanf("%d", &choice);
stu[i].push_back(choice);
}
}
sort(app, app + NumOfApp, cmp);
/*
for (i = 0; i < NumOfApp; i++)
printf("%d\n", app[i].index);*/
vector<int>::iterator k;
for (i = 0; i < NumOfApp; i++){
if (app[i].index >= NumOfApp)
continue;
for ( k = stu[app[i].index].begin(); k != stu[app[i].index].end(); k++){
j = *k;
if (sch[j].size() < school[j])
{
sch[j].push_back(app[i].index);
s[j] = app[i];
break;
}
else if (app[i].total == s[j].total &&app[i].ge == s[j].ge){
sch[j].push_back(app[i].index);
s[j] = app[i];
break;
}
}
}
for (i = 0; i < NumOfSch; i++){
sort(sch[i].begin(), sch[i].end());
for (j = 0; j < sch[i].size(); j++){
printf("%d", sch[i][j]);
if (j == sch[i].size() - 1)
continue;
putchar(' ');
}
putchar('\n');
}
return 0;
}
pat 1080
最新推荐文章于 2020-06-06 10:26:29 发布