PAT 1025. PAT Ranking

来源:互联网 发布:矩阵型组织结构优缺点 编辑:程序博客网 时间:2024/05/09 20:56

题目:http://pat.zju.edu.cn/contests/pat-a-practise/1025

题解:

先分别排序,再整体排序。要注意相同分数相同名次。

代码:

#include<cstdio>#include<iostream>#include<cstring>#include<cmath>#include<string>#include<vector>#include<queue>#include<stack>#include<map>#include<algorithm>using namespace std;struct student{    char id[15];    int score;    int rankAll;    int rankLocal;    int localNum;}stu[30005];bool cmp(const struct student &a,const struct student &b){    if(a.score>b.score) return true;    else if(a.score==b.score) return strcmp(a.id,b.id)<0;    else return false;}void doRankLocal(int st,int en,int len){    int idx=1,num=1;    stu[st].rankLocal=idx;    for(int i=1;i<len;++i)    {        if(stu[st+i].score==stu[st+i-1].score)        {            stu[st+i].rankLocal=idx;            ++num;        }        else        {            idx+=num;            num=1;            stu[st+i].rankLocal=idx;        }    }}void doRankAll(int st,int en,int len){    int idx=1,num=1;    stu[st].rankAll=idx;    for(int i=1;i<len;++i)    {        if(stu[st+i].score==stu[st+i-1].score)        {            stu[st+i].rankAll=idx;            ++num;        }        else        {            idx+=num;            num=1;            stu[st+i].rankAll=idx;        }    }}int main(){    int idx=0;    int n,k;    scanf("%d",&n);    for(int i=0;i<n;++i)    {        scanf("%d",&k);        for(int j=0;j<k;++j)        {            scanf("%s%d",stu[idx].id,&stu[idx].score);            stu[idx].localNum=i+1;            ++idx;        }        sort(stu+idx-k,stu+idx,cmp);        doRankLocal(idx-k,idx,k);    }    sort(stu,stu+idx,cmp);    doRankAll(0,idx,idx);    printf("%d\n",idx);    for(int i=0;i<idx;++i)    {        printf("%s %d %d %d\n",stu[i].id,stu[i].rankAll,stu[i].localNum,stu[i].rankLocal);    }    return 0;}

来源:http://blog.csdn.net/acm_ted/article/details/20137869

0 0
原创粉丝点击