1080 Graduate Admission

文章大意:类似高考志愿录取,不同的时同分(成绩和面试分数都一样)的时候,报的是一个学校的话不管名额有无,都要录取。

易错点:要记得排序以后序号会变,要保存之前的序号;

然后在放入对应的结果集合的时候,放入的是排序前的序号,而我们在进行比较的时候(比较是否和最后一个成绩相同),其实需要的排序以后的序号。详细见代码实现。

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
typedef struct node{
    int GE,GI;
    int choice[7];
    int index;
}node;
node t[40001];
int last[102];//对应学校最后一个录取的排序后序号
int quotas[102]={0};//学校的名额
int n,m,k;
bool cmp(node t1,node t2){
    if((t1.GE+t1.GI) != (t2.GE+t2.GI)){
        return (t1.GE+t1.GI) > (t2.GE+t2.GI);
    }
    return t1.GE > t2.GE;
} 
vector<int> a[102];
int main(){
    
    cin>>n>>m>>k;
    for(int i=0;i<m;++i){
        cin>>quotas[i];
    }
    for(int i=0;i<n;++i){
        cin>>t[i].GE>>t[i].GI;
        t[i].index=i;
        for(int j=0;j<k;++j){
            cin>>t[i].choice[j];
        }
    }
    sort(t,t+n,cmp);
    for(int i=0;i<n;++i){
        for(int j=0;j<k;++j){
            if(quotas[t[i].choice[j]] > 0){
                a[t[i].choice[j]].push_back(t[i].index);//易错点:放入的是排序前的序号
                quotas[t[i].choice[j]]--;
                last[t[i].choice[j]]=i;
                //易错点:放入的是排序前的序号,而我们在进行比较成绩的时候,其实需要的排序以后的序号
                break;
            }
            if(quotas[t[i].choice[j]] == 0){
                if(t[last[t[i].choice[j]]].GE == t[i].GE && t[last[t[i].choice[j]]].GI == t[i].GI){
                     a[t[i].choice[j]].push_back(t[i].index);
                     last[t[i].choice[j]]=i;
                     break;
                }
            }
        }
    }
    for(int i=0;i<m;++i){
        sort(a[i].begin(),a[i].end());
        for(int j=0;j<a[i].size();++j){
            if(j==0){
                cout<<a[i][j];
            }else{
                cout<<" "<<a[i][j];
            }
        }
        cout<<endl;
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值