1025 PAT Ranking (25分)

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;
} 

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

时间: 2024-10-06 08:28:50

1025 PAT Ranking (25分)的相关文章

1025 PAT Ranking (25 分)

1025 PAT Ranking (25 分) Programming Ability Test (PAT) is organized by the College of Computer Science and Technology of Zhejiang University. Each test is supposed to run simultaneously in several places, and the ranklists will be merged immediately

PAT 甲级1025 PAT Ranking (25 分)(结构体排序,第一次超时了,一次sort即可小技巧优化)

题意: 给定一次PAT测试的成绩,要求输出考生的编号,总排名,考场编号以及考场排名. 分析: 题意很简单嘛,一开始上来就,一组组输入,一组组排序并记录组内排名,然后再来个总排序并算总排名,结果发现最后一个测试点超时. 发现自己一开始太傻太盲目,其实只要一次性全部输进来,记录好考场编号,一次排序就可以了.既然只排了一次,怎么计算考场排名呢,这里我用了三个数组 int g_rank[100];//记录各个考场当前排到的名次 (当前最后一个人的名次) int g_score[100];//记录个考场当

1025. PAT Ranking (25)

题目如下: Programming Ability Test (PAT) is organized by the College of Computer Science and Technology of Zhejiang University. Each test is supposed to run simultaneously in several places, and the ranklists will be merged immediately after the test. No

1025 PAT Ranking (25)(25 point(s))

problem Programming Ability Test (PAT) is organized by the College of Computer Science and Technology of Zhejiang University. Each test is supposed to run simultaneously in several places, and the ranklists will be merged immediately after the test.

PAT (Advanced Level) 1025. PAT Ranking (25)

简单题. #include<iostream> #include<cstring> #include<cmath> #include<algorithm> #include<cstdio> #include<queue> #include<string> #include<vector> using namespace std; const int maxn=110; int n,tot=0; int sz[m

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

#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.

1025 PAT Ranking[排序][一般]

1025 PAT Ranking (25)(25 分) Programming Ability Test (PAT) is organized by the College of Computer Science and Technology of Zhejiang University. Each test is supposed to run simultaneously in several places, and the ranklists will be merged immediat

1025. PAT Ranking

1025. PAT Ranking (25) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Programming Ability Test (PAT) is organized by the College of Computer Science and Technology of Zhejiang University. Each test is supposed to run simultaneous

pat1025. PAT Ranking (25)

1025. PAT Ranking (25) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Programming Ability Test (PAT) is organized by the College of Computer Science and Technology of Zhejiang University. Each test is supposed to run simultaneous