1. 题目源地址:http://ac.jobdu.com/problem.php?pid=1005
2. 主要参考博客:http://blog.csdn.net/sjf0115/article/details/8618157
3. 源代码:
//题目1005:Graduate Admission
#include<iostream>
#include<algorithm>
#include<stdio.h>
using namespace std;
struct Application
{
int GE;
int GI;
int GF;//最终成绩
int PS[6];//报考学习
int ID;//申请编号
}app[40010];
struct School
{
int quota;//限制名额
int count;//实际招收人数
int AppID[4001];//招收的学生ID
}school[110];
//排序函数
int cmp(Application a,Application b)
{
if(a.GF != b.GF)
return a.GF > b.GF;
else if(a.GE != b.GE)
return a.GE > b.GE;
}
int cmp2(const void *a,const void *b)
{
return *(int *)a - *(int *)b;
}
int main()
{
int N,M,K;//N;总申请数 M:学校数 K:报考学校数
int SID;//编号
int i,j;
while(cin>>N>>M>>K)
{
for(i=0;i<M;i++)//输入每个学校的限制名额数
{
cin>>school[i].quota;
school[i].count=0;
}
for(i=0;i<N;i++)//输入每份申请的相关信息
{
cin>>app[i].GE>>app[i].GI;//输出GE和GI成绩
app[i].GF=(app[i].GE+app[i].GI)/2;//算出最终成绩GF
for(j=0;j<K;j++)//输入填报的各个志愿学校
cin>>app[i].PS[j];
app[i].ID=i;//给每个申请志愿编号
}
sort(app,app+N,cmp);//排序
//安排招生
for(i=0;i<N;i++)
{
for(j=0;j<K;j++)
{
SID=app[i].PS[j];//取出学生报考的学校编号
if(school[SID].quota>0)//如果SID学校还没招满
{
school[SID].AppID[school[SID].count]=i;
school[SID].count++;
school[SID].quota--;
break;
}
//已经招满
else
{
int index=school[SID].AppID[school[SID].count-1];//最后一个招生人的ID
//如果所有成绩都一样,即使学校已经招满一样被录取
if(app[i].GF == app[index].GF && app[i].GE == app[index].GE)
{
school[SID].AppID[school[SID].count] = i;
school[SID].count ++;
school[SID].quota --;
break;
}
}
} //for
} //for
for(i = 0;i < M;i++)
{
for(j = 0;j < school[i].count;j++)
school[i].AppID[j] = app[school[i].AppID[j]].ID;
}
//输出学校招收情况
for(i = 0;i < M;i++)
{
//该学校没有招收到学生
if(school[i].count == 0)
printf("\n");
//该学校招收到1名学生
else if(school[i].count == 1)
printf("%d\n",school[i].AppID[0]);
//该学校招收到大于1名学生,需排序安编号大小输出
else
{
//排序输出
qsort(school[i].AppID,school[i].count,sizeof(int),cmp2);
int first = 1;
for(j = 0;j < school[i].count;j++)
{
if(first)
first = 0;
else
printf(" ");
printf("%d",school[i].AppID[j]);
}
printf("\n");
}
}//for
}
return 0;
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/163045.html