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

1025 PAT Ranking (25分)

时间:2020-02-22 20:01:51      阅读:53      评论:0      收藏:0      [点我收藏+]

标签:整合   code   size   http   img   pat   排序   math   一个   

1025 PAT Ranking (25分)

1. 题目

技术图片

2. 思路

设置结构体, 先对每一个local排序,再整合后排序

3. 注意点

整体排序时注意如果分数相同的情况下还要按照编号排序

4. 代码

#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;

struct stu{
    int location_number;
    char registration_number[14];
    int score;
    int local_rank;
    int final_rank;
};

int cmp(stu a, stu b){
    if(a.score == b.score){
        return strcmp(a.registration_number, b.registration_number)<0;
    }
    return a.score>b.score; 
}

void show(stu s[], int size){
    printf("----\n");
    for(int i=0;i<size;i++){
        printf("%s %d %d %d\n", 
        s[i].registration_number, s[i].score, 
        s[i].location_number, s[i].local_rank);
    }
    printf("----\n");
}

void _show(stu s[], int size){
    for(int i=0;i<size;i++){
        printf("%s %d %d %d\n", 
        s[i].registration_number, s[i].final_rank, 
        s[i].location_number, s[i].local_rank);
    }
}

void showD1(int a[], int size){
    printf("----\n");
    for(int i=0;i<size;i++){
        printf("%d ", a[i]);
    }
    printf("----\n");
}

void localRank(stu s[], int size){
    sort(s, s+size, cmp);
    int local_rank = 1;
    s[0].local_rank = local_rank;
    for(int i=1;i<size;i++){
        if(s[i].score != s[i-1].score){
            local_rank = i+1;
        }
        s[i].local_rank = local_rank;
    }
}

void finalRank(stu s[], int size){
    sort(s, s+size, cmp);
    int final_rank = 1;
    s[0].final_rank = final_rank;
    for(int i=1;i<size;i++){
        if(s[i].score != s[i-1].score){
            final_rank = i+1;
        }
        s[i].final_rank = final_rank;
    }
}

void stucat(stu s[], stu s1[], int start, int length){
    for(int i=0;i<length;i++){
        s[start+i] = s1[i];
    }
}

int main(){
    stu s[30000];
    int N;
    scanf("%d", &N);
    
    int num = 0;
    for(int i=0;i<N;i++){
        int K;
        scanf("%d", &K);
        stu s1[K];
        for(int j=0;j<K;j++){
            scanf("%s %d", s1[j].registration_number, &s1[j].score);
            s1[j].location_number = i+1;
        }
        localRank(s1, K);
        stucat(s, s1, num, K);
        num += K;
    }
    finalRank(s, num);
    printf("%d\n", num);
    _show(s, num);
    return 0;
} 

1025 PAT Ranking (25分)

标签:整合   code   size   http   img   pat   排序   math   一个   

原文地址:https://www.cnblogs.com/d-i-p/p/12346724.html

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