#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct Student{
int id;
int examGrade;
int interviewGrade;
int totalGrade;
int volunteer[6];
};
struct School{
int remainQuota;
vector<Student> students;
};
bool cmp1(Student a,Student b){
if(a.totalGrade != b.totalGrade)
return a.totalGrade > b.totalGrade;
else if(a.examGrade != b.examGrade)
return a.examGrade > b.examGrade;
else
return a.id < b.id;
}
bool cmp2(Student a,Student b){
return a.id < b.id;
}
School schools[110];
Student students[40010];
int main(){
int n,m,k;
scanf("%d %d %d",&n,&m,&k);
// n : 申请者数 <= 40000
// m : 学校数 <= 100
// k : 每个申请者可填志愿数 <= 5
for(int i = 0;i < m;i++){
scanf("%d",&schools[i].remainQuota);
}
for(int i = 0;i < n;i++){
scanf("%d %d",&students[i].examGrade,&students[i].interviewGrade);
for(int j = 0;j < k;j++){
scanf("%d",&students[i].volunteer[j]);
}
students[i].id = i;
students[i].totalGrade = students[i].examGrade + students[i].interviewGrade;
}
sort(students,students + n,cmp1);
for(int i = 0;i < n;i++){ // 为每个学生找学校
for(int j = 0;j < k;j++){ // 遍历该学生的每个志愿
if(schools[students[i].volunteer[j]].remainQuota > 0){ // 该学校还有名额
schools[students[i].volunteer[j]].students.push_back(students[i]);
schools[students[i].volunteer[j]].remainQuota--;
break;
}else{ // 该学校没有名额了,看这个学生是不是和该学校录取的最后一个学生总分和考试分数均一样,一样则录取
if(schools[students[i].volunteer[j]].students[schools[students[i].volunteer[j]].students.size() - 1].totalGrade == students[i].totalGrade
&&
schools[students[i].volunteer[j]].students[schools[students[i].volunteer[j]].students.size() - 1].examGrade == students[i].examGrade){
schools[students[i].volunteer[j]].students.push_back(students[i]);
break;
}
}
}
}
for(int i = 0;i < m;i++){
int s = schools[i].students.size();
if(s > 0){ // 这个学校录取到学生了
sort(schools[i].students.begin(),schools[i].students.end(),cmp2);
for(int j = 0;j < s;j++){
if(j != s - 1){
printf("%d ",schools[i].students[j].id);
}else{
printf("%d\n",schools[i].students[j].id);
}
}
}else{
printf("\n");
}
}
system("pause");
return 0;
}
PAT | A1080 Graduate Admission
最新推荐文章于 2024-07-15 21:33:54 发布