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
#include
#include
using namespace std;
typedef struct node
{
int num;
int ge,gi;
vectorpre;
};
node s[40000];
bool cmp(node x,node y)
{
if(x.ge+x.gi!=y.ge+y.gi)
return x.ge+x.gi>y.ge+y.gi;
else
return x.ge>y.ge;
}
int main()
{
int n,m,k;
cin>>n>>m>>k;
vectorqu(m);
vectornum(m);
vectorlast(m);
vector>ans(m);
for(int i=0;i>qu[i];
for(int i=0;i>s[i].ge>>s[i].gi;
s[i].num=i;
for(int j=0;j>pre;
s[i].pre.push_back(pre);
}
}
sort(s,s+n,cmp);
for(int i=0;i