PAT甲级-1025 PAT Ranking (25分)

题目:1025 PAT Ranking (25分)
分析:排序题,sort的使用,建立一个结构,每输入完一组时就对该组进行sort,最后对整个sort即可
#include <iostream>
#include<cstring>
#include<vector>
#include<stdio.h>
#include<queue>
#include<math.h>
#include<stack>
#include<algorithm>
#include<map>
#include<set>
#define MAX 99999999
using namespace std;
typedef long long ll;
struct stu{
    
    
    string id;
    int score;
    int location;
    int final_rank,local_rank;
};
int cmp(stu s1,stu s2)
{
    
    
    if(s1.score != s2.score) return s1.score > s2.score;
    return s1.id < s2.id;
}
int main()
{
    
    
    int n,m;
    int cnt = 0;
    stu s[30001];
    cin>>n;
    for(int i = 0;i<n;i++){
    
    
        cin>>m;
        int beg = cnt;
        for(int j = 0;j<m;j++){
    
    
            string s1;
            int x;
            cin>>s1>>x;
            s[cnt].id = s1;
            s[cnt].score = x;
            s[cnt++].location = i+1;
        }
        sort(s+beg,s+cnt,cmp);
        for(int i = beg;i<cnt;i++){
    
    
            if(i == beg)
                s[i].local_rank = 1;
            else{
    
    
                if(s[i].score == s[i-1].score)
                    s[i].local_rank = s[i-1].local_rank;
                else
                    s[i].local_rank = i-beg+1;
            }
        }
    }
    sort(s,s+cnt,cmp);
    for(int i = 0;i<cnt;i++){
    
    
        if(i == 0)
            s[i].final_rank = 1;
        else{
    
    
            if(s[i].score == s[i-1].score)
                s[i].final_rank = s[i-1].final_rank;
            else
                s[i].final_rank = i+1;
        }
    }
    cout<<cnt<<endl;;
    for(int i = 0;i<cnt;i++)
        cout<<s[i].id<<" "<<s[i].final_rank<<" "<<s[i].location<<" "<<s[i].local_rank<<endl;
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_43567222/article/details/112862373