其他分享
首页 > 其他分享> > PAT (Advanced Level) Practice 1080 Graduate Admission (30 分)

PAT (Advanced Level) Practice 1080 Graduate Admission (30 分)

作者:互联网

It is said that in 2011, there are about 100 graduate schools ready to proceed over 40,000 applications in Zhejiang Province. It would help a lot if you could write a program to automate the admission procedure.

Each applicant will have to provide two grades: the national entrance exam grade G E G_E GE​ , and the terview grade G I G_I GI​​ . The final grade of an applicant is ( G E ​ + G I ​ ) / 2 (G_E​ +G_I​ )/2 (GE​​+GI​​)/2. The admission rules are:

Input Specification:

Each input file contains one test case.
Each case starts with a line containing three positive integers: N ( ≤ 40 , 000 ) N (≤40,000) N(≤40,000), the total number of applicants; M ( ≤ 100 ) M (≤100) M(≤100), the total number of graduate schools; and K ( ≤ 5 ) K (≤5) K(≤5), the number of choices an applicant may have.
In the next line, separated by a space, there are M M M positive integers. The i-th integer is the quota of the i-th graduate school respectively.
Then N lines follow, each contains 2 + K 2+K 2+K integers separated by a space. The first 2 integers are the applicant’s G E G_E GE​​ and G I G_I GI​​ , respectively. The next K integers represent the preferred schools. For the sake of simplicity, we assume that the schools are numbered from 0 to M − 1 M−1 M−1, and the applicants are numbered from 0 to N − 1 N−1 N−1.

Output Specification:

For each test case you should output the admission results for all the graduate schools. The results of each school must occupy a line, which contains the applicants’ numbers that school admits. The numbers must be in increasing order and be separated by a space. There must be no extra space at the end of each line. If no applicant is admitted by a school, you must output an empty line correspondingly.

Sample Input:

11 6 3
2 1 2 2 2 3
100 100 0 1 2
60 60 2 3 5
100 90 0 3 4
90 100 1 2 0
90 90 5 1 3
80 90 1 0 2
80 80 0 1 2
80 80 0 1 2
80 70 1 3 2
70 80 1 2 3
100 100 0 2 4

Sample Output:

0 10
3
5 6 7
2 8

1 4

tips

AC code

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

struct Applicant{
    int ge,gi,id;
    int choice[5];
    bool operator<(const Applicant& b){
        if((ge+gi)!=(b.ge+b.gi)) return (ge+gi)>(b.ge+b.gi);
        if(ge!=b.ge) return ge>b.ge;
        return gi>b.gi;
    }
}app[40005];

int N,M,K;
int quota[105];    //学校的剩余名额

int main(){
    scanf("%d %d %d",&N,&M,&K);
    for(int i=0;i<M;i++){
        scanf("%d",quota+i);
    }
    for(int i=0;i<N;i++){
        app[i].id=i;
        for(int j=0;j<2+K;j++){
            if(j==0) scanf("%d",&app[i].ge);
            else if(j==1) scanf("%d",&app[i].gi);
            else scanf("%d",&app[i].choice[j-2]);
        }
    }
    
    //排名高的先选,败者食尘
    sort(app,app+N);
    vector<vector<int> > admission(M);   //录取名单
    vector<pair<int,int> > grade(M);
     
    for(int i=0;i<N;i++){
        for(int j=0;j<K;j++){
            if(admission[app[i].choice[j]].size()<quota[app[i].choice[j]]){
                admission[app[i].choice[j]].push_back(app[i].id);
                grade[app[i].choice[j]] = make_pair(app[i].ge,app[i].gi);
                break;
            }
            else if(app[i].ge==grade[app[i].choice[j]].first and app[i].gi==grade[app[i].choice[j]].second){
                admission[app[i].choice[j]].push_back(app[i].id);
                break;
            }     
        }
    }
    for(auto& v:admission){
        sort(v.begin(),v.end());
        for(int i=0;i<v.size();i++){
            if(i>0) printf(" ");
            printf("%d",v[i]);
        }
        printf("\n");        
    }
    return 0;
}

标签:PAT,1080,int,app,30,grade,ge,100,gi
来源: https://blog.csdn.net/qq_52429637/article/details/121913138