1080. Graduate Admission

#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;

}
没必要真的求出排名,成绩相同就是排名一样,人脑袋的思路总是会做很多不必要的事
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值