pat 1080

#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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值