现在的位置: 首页 > 综合 > 正文

1025. PAT Ranking

2014年09月08日 ⁄ 综合 ⁄ 共 1632字 ⁄ 字号 评论关闭

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

// 先本地排序,在全局排序


#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#include <math.h>


#include <iostream>
#include <string>
#include <vector>
#include <stack>
#include <queue>
#include <set>
#include <algorithm>

using namespace std;

struct Stu
{
    string id;
    int score;
    int final_rank;
    int location;
    int local_rank;
    bool operator < (const Stu&A) const
    {
        if(score != A.score)
            return score > A.score;
        else
            return id < A.id;
    }
};


////////////////////////////////////////
int N, K;
vector<Stu> student;
vector<Stu> temp_student_list;


void sortAndFill_local(vector<Stu> & v)
{
    sort(v.begin(), v.end());
    int score=v[0].score;
    v[0].local_rank=1;
    int i;
    for(i=1; i<v.size(); i++)
    {
        if(v[i].score == score)
        {
            v[i].local_rank = v[i-1].local_rank;
        }
        else
        {
            v[i].local_rank = i+1;
            score = v[i].score;
        }
    }
}


void sortAndFill_final(vector<Stu> & v)
{
    sort(v.begin(), v.end());
    int score=v[0].score;
    v[0].final_rank=1;
    int i;
    for(i=1; i<v.size(); i++)
    {
        if(v[i].score == score)
        {
            v[i].final_rank = v[i-1].final_rank;
        }
        else
        {
            v[i].final_rank = i+1;
            score = v[i].score;
        }
    }
}


void saveToStudent(vector<Stu> v)
{
    int i;
    
    for(i=0; i<v.size(); i++)
    {
        student.push_back(v[i]);
    }
    return ;
}


void Output()
{
    cout << student.size() << endl;
    int i;
    for(i=0; i<student.size(); i++)
    {
        cout << student[i].id << " " 
        << student[i].final_rank << " " 
        << student[i].location << " " 
        << student[i].local_rank << endl;
    }
    return ;
}



int main()
{
#ifdef ONLINE_JUDGE
#else
    freopen("E:\\in.txt", "r", stdin);
#endif

    cin >> N;
    int loc;
    for(loc=1; loc<= N; loc++)
    {
        temp_student_list.clear();
        cin >> K;
        Stu t;
        while(K-->0)
        {
            cin >> t.id >> t.score;
            t.location=loc;
            temp_student_list.push_back(t);
        }// 读入loc的数据

        sortAndFill_local(temp_student_list);
        saveToStudent(temp_student_list);
    }
    sortAndFill_final(student);
    Output();

    return 0;
}
【上篇】
【下篇】

抱歉!评论已关闭.