#include<vector>
#include<algorithm>
#include<iostream>
using namespace std;
struct node
{
int ge,gi,gf,want[5],no;
bool operator<(const node&x)const
{
if(x.gf!=gf)return gf>x.gf;
return ge>x.ge;
}
};
int main()
{
int cmax[1000],n,m,k;
cin>>n>>m>>k;
vector<node>st(n);
vector<vector<node>>school(m);
for(int i=0;i<m;++i)
cin>>cmax[i];
for(int i=0;i<n;++i)
{
cin>>st[i].ge>>st[i].gi;
st[i].no=i; st[i].gf=(st[i].ge+st[i].gi)/2;
for(int j=0;j<k;++j)
cin>>st[i].want[j];
}
sort(st.begin(),st.end());
for(int i=0;i<n;++i)
for(int j=0;j<k;++j)
{
int t=st[i].want[j];
node y;
if(school[t].size())
y=school[t].back();
if(school[t].size()<cmax[t]||y.ge==st[i].ge&&y.gf==st[i].gf)
{
school[t].push_back(st[i]);
break;
}
}
for(int i=0;i<m;++i)
{
using CN=const node;
sort(school[i].begin(),school[i].end(),[](CN&x,CN&y){return x.no<y.no;});
for(int flag=0,j=0;j<school[i].size();++j)
{
if(flag) cout<<' ';
else flag=1;
cout<<school[i][j].no;
}
cout<<endl;
}
return 0;
}
没必要真的求出排名,成绩相同就是排名一样,人脑袋的思路总是会做很多不必要的事
1080. Graduate Admission
最新推荐文章于 2022-06-21 21:50:19 发布