#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
const int maxn=40010;
struct student{
int ge,gi,school[6],rank,index;
}st[maxn];
int N,M,K,quota[150];
vector<int> result[150];
bool cmp(student a,student b){
if(a.ge+a.gi!=b.ge+b.gi) return a.ge+a.gi>b.ge+b.gi;
else return a.ge>b.ge;
}
bool cmp2(int a,int b){
return st[a].index<st[b].index;
}
int main(){
//freopen("g:\\in.txt","r",stdin);
scanf("%d%d%d",&N,&M,&K);
for(int i=0;i<M;i++)
scanf("%d","a[i]);
for(int i=0;i<N;i++){
scanf("%d%d",&st[i].ge,&st[i].gi);
st[i].index=i;
for(int j=0;j<K;j++){
scanf("%d",&st[i].school[j]);
}
}
sort(st,st+N,cmp);
for(int i=0;i<N;i++){
for(int j=0;j<K;j++){
int schindex=st[i].school[j];
if(quota[schindex]<=0) continue;
if(quota[schindex]>result[schindex].size()){
result[schindex].push_back(i);
break;
}else{
int last=result[schindex][result[schindex].size()-1];
if(st[i].ge==st[last].ge&&st[i].gi==st[last].gi){
result[schindex].push_back(i);
break;
}
}
}
}
for(int i=0;i<M;i++,printf("\n")){
if(result[i].size()==0) continue;
sort(result[i].begin(),result[i].end(),cmp2);
for(int j=0;j<result[i].size();j++){
int temp=st[result[i][j]].index;
j!=result[i].size()-1?printf("%d ",temp):printf("%d",temp);
}
}
return 0;
}
PAT A1080
最新推荐文章于 2020-06-05 15:14:44 发布