1025. PAT Ranking

来源:互联网 发布:手机淘宝首页登陆 编辑:程序博客网 时间:2024/04/28 06:28

题目链接: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;}


0 0
原创粉丝点击