题目1005:Graduate Admission (二)

2014-11-24 01:02:42 · 作者: · 浏览: 7
scanf("%d",&student[i].choice[j]);
}
}
sort(student,student+n,comp);

for (i=0;i {
for (j=0;j {
if (school[student[i].choice[j]].number>0)
{
school[student[i].choice[j]].number--;
school[student[i].choice[j]].sequence[school[student[i].choice[j]].cn++]=student[i].rank;
if (student[i+1].ge==student[i].ge && student[i+1].gi==student[i].gi&&school[student[i].choice[j]].number==0)
school[student[i].choice[j]].sequence[school[student[i].choice[j]].cn++]=student[i+1].rank;
break;
}
}
}

for (i=0;i {
if (school[i].cn==0)
{
printf("\n");
}
else
{
sort (school[i].sequence,school[i].sequence+school[i].cn);
for (j=0;j {
if (j!=school[i].cn-1)
printf("%d ",school[i].sequence[j]);
else
printf("%d\n",school[i].sequence[j]);
}
}
}
}
return 0;
}

#include
#include
#include
#include
using namespace std;

struct Student
{
int rank;
int ge;
int gi;
int choice[5];
}student[40001];

struct School
{
int number;
int sequence[40002];
int cn;
}school[101];

bool comp (Student a, Student b)
{
if ((a.ge+a.gi)!=(b.ge+b.gi))
return (a.ge+a.gi) > (b.ge+b.gi);
else
return a.ge > b.ge;
}

int main()
{

int n,m,k;
int i,j;
while (scanf ("%d%d%d",&n,&m,&k)!=EOF)
{
memset(student,0,sizeof(student));
memset(school,0,sizeof(school));
for (i=0;i {
scanf ("%d",&school[i].number);
}

for (i=0;i {
scanf ("%d%d",&student[i].ge,&student[i].gi);
student[i].rank=i;
for (j=0;j {
scanf("%d",&student[i].choice[j]);
}
}
sort(student,student+n,comp);

for (i=0;i {
for (j=0;j {
if (school[student[i].choice[j]].number>0)
{
school[student[i].choice[j]].number--;
school[student[i].choice[j]].sequence[school[student[i].choice[j]].cn++]=student[i].rank;
if (student[i+1].ge==student[i].ge && student[i+1].gi==student[i].gi&&school[student[i].choice[j]].number==0)
school[student[i].choice[j]].sequence[school[student[i].choice[j]].cn++]=student[i+1].rank;
break;
}
}
}

for (i=0;i {
if (school[i].cn==0)
{
printf("\n");
}
else
{
sort (school[i].sequence,school[i].sequence+school[i].cn);
for (j=0;j {
if (j!=school[i].cn-1)
printf("%d ",school[i].sequence[j]);
else
printf("%d\n",school[i].sequence[j]);
}
}
}
}
return 0;
}理清楚思路,就好做了。花了不少时间,加油!!!

后面再花时间优化。