码迷,mamicode.com
首页 > 其他好文 > 详细

PAT:1080. Graduate Admission (30) 部分错误(录取以学校为导向而不是考生志愿为导向导致的错误)

时间:2015-03-02 16:22:37      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;

int want[106];        //各学校招生人数

struct Student
{
  int GE,GI,sum,rank,ID;
  int prefer[6];
  bool R;          //代表该生录取情况
}STU[40066];

bool cmp(Student a,Student b)
{
  if(a.sum!=b.sum)
    return a.sum>b.sum;
  else
    return a.GE>b.GE;
}

int main()
{
  memset(STU,0,sizeof(STU));
  fill(want,want+106,-1);        //各学校招生人数初始设置-1
  int n,m,k;              //n名考生,m所学校,k个志愿
  scanf("%d%d%d",&n,&m,&k);
  for(int i=0 ; i<m ; ++i)      //输入各学校招生人数
    scanf("%d",&want[i]);
  for(int i=0 ; i<n ; ++i)
  {
    scanf("%d %d",&STU[i].GE, &STU[i].GI);    //填入分数
    STU[i].sum=STU[i].GE+STU[i].GI;        //填入总分
    STU[i].ID=i;                //填入编号
    for(int j=0 ; j<k ; ++j)
    {
      int tmp=-1;
      scanf("%d",&tmp);      //填入志愿
      STU[i].prefer[tmp]=1;
    }
  }
  sort(STU,STU+n,cmp);
  STU[0].rank=1;
  for(int i=1 ; i<n ; ++i)            //填入排序
  {
    if(STU[i].sum==STU[i-1].sum && STU[i].GE==STU[i-1].GE)
      STU[i].rank=STU[i-1].rank;
    else
      STU[i].rank=i+1;
  }
  //学校优先选择权法(不符合题意)
  for(int i=0 ; i<m ; ++i)            //输出各学校录取信息
  {
    int top=0;                  //用于输出并列排名的破格录取
    int kongge=0;                //控制空格的输出
    for(int j=0 ; j<n ; ++j)
    {
      if(STU[j].R==0 && STU[j].prefer[i]==1 && (want[i]>0 || want[i]==0 && STU[j].rank==top))  //该生未被录取,该生报考这个学校,该校还招人;或者学校招满,只招并列此名次的同学
      {
        if(kongge!=0)
          printf(" ");
        printf("%d",STU[j].ID);
        kongge=1;
        top=STU[j].rank;          //记录该考生的排名
        STU[j].R=1;              //标记考生已投档
        --want[i];              //招生需求人数-1
      }
    }
    printf("\n");
  }

  return 0;
}

PAT:1080. Graduate Admission (30) 部分错误(录取以学校为导向而不是考生志愿为导向导致的错误)

标签:

原文地址:http://www.cnblogs.com/Evence/p/4308810.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!