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

PAT:1025. PAT Ranking (25) 编辑错误

时间:2015-03-01 14:24:00      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:

#include<stdio.h>
#include<algorithm>
using namespace std;
struct Student
{
  char ID[15];
  int score,final_rank,location_number,local_rank;  //分数,总排名,考场号,场内排名
}STU[30010];

bool cmp(Student a, Student b)
{
  if(a.score!=b.score)
    return a.score>b.score;      //按分数从大到小
  else
    return strcmp(a.ID,b.ID)<0;    //按字典序从小到大
}

int main()
{
  int n,I=0;            //I记录所有STU学生个数
  scanf("%d",&n);
  for(int t=1 ; t<=n ; ++t)    //n个考场
  {
    int k;
    scanf("%d",&k);
    for(int i=0 ; i<k ; ++i)
    {
      scanf("%s %d",&STU[I+i].ID, &STU[I+i].score);  //记录ID,分数
      STU[I+i].location_number=t;            //记录考场号
    }
    sort(STU+I,STU+I+k,cmp);
    STU[I].local_rank=1;
    for(int i=1 ; i<k ; ++i)              //记录场内排名
    {
      if(STU[I+i].score==STU[I+i-1].score)
        STU[I+i].local_rank=STU[I+i-1].local_rank;  //和前一个同学名次相同
      else
        STU[I+i].local_rank=i+1;          //否则排名为i+1
    }
    I+=k;                      //到下一个考场,I从k个考生之后开始算
  }
  sort(STU,STU+I,cmp);
  STU[0].final_rank=1;
  for(int i=1 ; i<I ; ++i)              //总排名
  {
    if(STU[i].score==STU[i-1].score)
      STU[i].final_rank=STU[i-1].final_rank;  //和前一个同学名次相同
    else
      STU[i].final_rank=i+1;          //否则排名为i+1
  }
  printf("%d\n",I);
  for(int i=0 ; i<I ; ++i)
    printf("%s %d %d %d\n",STU[i].ID,STU[i].final_rank,STU[i].location_number,STU[i].local_rank);
  return 0;
}

PAT:1025. PAT Ranking (25) 编辑错误

标签:

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

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