标签:des style blog http io ar color os sp
题目链接:http://www.patest.cn/contests/pat-a-practise/1080
It is said that in 2013, there were 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 GE, and the interview grade GI. The final grade of an applicant is (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), the total number of applicants; M (<=100), the total number of graduate schools; and K (<=5), the number of choices an applicant may have.
In the next line, separated by a space, there are 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 integers separated by a space. The first 2 integers are the applicant‘s GE and 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, and the applicants are numbered from 0 to 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 4Sample Output:
0 10 3 5 6 7 2 8 1 4
代码如下:
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;
struct student
{
    int E, I, T;
    int id;
    int Rank;
    int ch[17];
} stu[40017];
bool cmp(student a, student b)
{
    if(a.T == b.T)
    {
        return a.E > b.E;
    }
    return a.T > b.T;
}
int main()
{
    int n, m, k;
    int num[117];
    int lastrank[117];
    while(~scanf("%d%d%d",&n,&m,&k))
    {
        memset(lastrank,0,sizeof(lastrank));
        for(int i = 0; i < m; i++)
        {
            scanf("%d",&num[i]);
        }
        for(int i = 0; i < n; i++)
        {
            scanf("%d%d",&stu[i].E,&stu[i].I);
            stu[i].T = stu[i].E+stu[i].I;
            stu[i].id = i;
            for(int j = 0; j < k; j++)
            {
                scanf("%d",&stu[i].ch[j]);
            }
        }
        sort(stu,stu+n,cmp);
        for(int i = 1; i < n; i++)
        {
            if(stu[i].T == stu[i-1].T && stu[i].E == stu[i-1].E)
                stu[i].Rank = stu[i-1].Rank;
            else
                stu[i].Rank = i;
        }
        vector <int >ac[117];
        for(int i = 0; i < n; i++)
        {
            int tt = stu[i].id;
            for(int j = 0; j < k; j++)
            {
                if(ac[stu[i].ch[j]].size() < num[stu[i].ch[j]])
                {
                    ac[stu[i].ch[j]].push_back(tt);
                    lastrank[stu[i].ch[j]] = stu[i].Rank;
                    break;
                }
                else if(ac[stu[i].ch[j]].size() > 0)
                {
                    if(stu[i].Rank == lastrank[stu[i].ch[j]])
                    {
                        ac[stu[i].ch[j]].push_back(tt);
                        break;
                    }
                }
            }
        }
        for(int i = 0; i < m; i++)
        {
            if(!ac[i].size())
            {
                printf("\n");
                continue;
            }
            sort(ac[i].begin(),ac[i].end());
            printf("%d",ac[i][0]);
            for(int j = 1; j < ac[i].size(); j++)
            {
                printf(" %d",ac[i][j]);
            }
            printf("\n");
        }
    }
    return 0;
}
1080. Graduate Admission (30) (模拟排序啊 ZJU_PAT)
标签:des style blog http io ar color os sp
原文地址:http://blog.csdn.net/u012860063/article/details/41594299