做题记录--day54

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
struct student{
    char regnum[100];
    int score;
    int listnum;
    int rank;
    int localrank;
}stu[30010];
bool cmp(student a,student b)
{
    if(a.score!=b.score)
        return a.score>b.score;
    return strcmp(a.regnum,b.regnum)<0;
}
int main()
{
    int n,k;
    scanf("%d",&n);
    int count=0;
    int n2=n;
    while(n--)
    {
        scanf("%d",&k);
        int temp=count;
        for(int i=1;i<=k;i++)
        {
            scanf("%s %d",stu[count].regnum,&stu[count].score);
            stu[count++].listnum=n2-n;
        }
        sort(stu+temp,count+stu,cmp);
        stu[temp].localrank=1;
        for(int i=temp+1;i<count;i++)
        {
            if(stu[i].score==stu[i-1].score)
                stu[i].localrank=stu[i-1].localrank;
            else
                stu[i].localrank=i-temp+1;
        }
    }
    sort(stu,stu+count,cmp);
    printf("%d\n",count);
    stu[0].rank=1;
    for(int i=1;i<count;i++)
    {
        if(stu[i].score==stu[i-1].score)
            stu[i].rank=stu[i-1].rank;
        else
            stu[i].rank=i+1;
    }
    for(int i=0;i<count;i++)
        printf("%s %d %d %d\n",stu[i].regnum,stu[i].rank,stu[i].listnum,stu[i].localrank);
    return 0;
}
View Code

PAT A1025 sort模板题了

sort(stu,stu+count,cmp)

stu是数组起始位置,stu+count是最后一位加一个

左闭右开

cmp在里面是struct的时候是自定义的。cmp为true的条件就是排序规则

比如 return a.score>b.score sort在cmp为true不动,说明在a的分数高的时候是保持原状态的,那么说明这是一个降序数组,最高分在前面

另外注意分数相同的情况下按照大小号排序。

localrank是在输入的过程中拍出来的,不能都输入进去以后再排。直接sort(stu+temp,stu+count,cmp)

猜你喜欢

转载自www.cnblogs.com/tingxilin/p/11616383.html