1080. Graduate Admission (30)

来源:互联网 发布:w3cschool java 编辑:程序博客网 时间:2024/06/06 03:02

点击打开链接

多次读错题目!

注意按照先按照排名排序,然后按照志愿是否是否满来分配招生

还有2点没过sad。。。

#include <cstdio>#include<algorithm>#include <set>#include <vector>using namespace std;#define STU 40010#define SCHOOL 110int n,m,k;struct s{int id;int ge,gi;double fin;int rank;int cho[5];}stu[STU];bool inq[STU];vector <int> ans[STU];int qutoa[SCHOOL];bool full[SCHOOL];bool cmp(s a,s b){if(a.fin==b.fin){return a.ge>b.ge;}else{return a.fin>b.fin;}}bool gre(int a,int b){return a<b;}int main(){freopen("in.txt","r",stdin);scanf("%d %d %d",&n,&m,&k);for(int i=0;i<m;i++){scanf("%d",&qutoa[i]);}for(int i=0;i<n;i++){scanf("%d %d",&stu[i].ge,&stu[i].gi);stu[i].fin=(double)(stu[i].ge+stu[i].gi)/2;for(int j=0;j<k;j++){scanf("%d",&stu[i].cho[j]);}stu[i].id=i;}sort(stu,stu+n,cmp);for(int i=0;i<n;i++){if(i==0){stu[0].rank=1;}else{if(stu[i].ge==stu[i-1].ge && stu[i].fin==stu[i-1].fin){stu[i].rank=stu[i-1].rank;}else{stu[i].rank=i+1;}}}for(int i=0;i<n;i++){for(int j=0;j<k;j++){int w=stu[i].cho[j];if(qutoa[w]>ans[w].size()){ans[w].push_back( stu[i].id );inq[ stu[i].id ]=true;break;}else{//边界情况if(ans[w].size()>0){int pre=ans[w][ ans[w].size()-1 ];if(stu[i].rank==stu[pre].rank){ans[w].push_back( stu[i].id );inq[ stu[i].id ]=true;break;}}}}}for(int i=0;i<m;i++){sort(ans[i].begin(),ans[i].end(),gre);if(ans[i].size()==0){printf("\n");}else{for(int j=0;j<ans[i].size();j++){if(j==0){printf("%d",ans[i][j]);}else{printf(" %d",ans[i][j]);}}printf("\n");}}return 0;}



0 0
原创粉丝点击