PAT 1012 The Best Rank

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

题目是很简单的,由于数据量很小,直接用O(N^2)的方法就可以了。

#include<iostream>
using namespace std;

struct info
{
    string id;
    int score[4];
    int rank[4];
};

int n,m;
info student[2001];

void sort()
{
    info tmp;
    for (int i = 0; i < 4; i++){
        for (int j = 1; j < n; j++)
        {
            tmp = student[j];
            int k = j - 1;
            while (k >=0 && student[j].score[i] > student[k].score[i]) --k;
            for (int p = j-1; p >= k+1; --p)
                student[p+1] = student[p];
            student[k+1] = tmp;
        }
        int rank = 1;
        int score; 
        int s = 0;
        while (s < n){
            score = student[s].score[i];
            int tt = 0;
            while (student[s].score[i] == score && s < n){
                student[s].rank[i] = rank;
                s++;
                tt++;    
            }
            rank += tt;        
        }
    }
}

int main()
{
    cin>>n>>m;
    for (int i = 0; i < n; i++){
        cin>>student[i].id>>student[i].score[1]>>student[i].score[2]>>student[i].score[3];
        student[i].score[0] = (student[i].score[1] + student[i].score[2] + student[i].score[3]) / 3;
    }
    sort();
    for (int i = 0; i < n ; i++)
        cout<<student[i].id<<" "<<student[i].rank[0]<<" "<<student[i].rank[1]<<" "<<student[i].rank[2]<<endl;
    for (int i = 0; i < m; i++){
        string id;
        cin>>id;
        int j;
        for (j = 0; j < n; j++)
            if (id == student[j].id){
                int r = n + m;
                int t;
                for (int k = 0; k < 4; k++)
                    if (student[j].rank[k] < r){
                        r = student[j].rank[k];
                        t = k;
                    }
                switch (t){
                    case 0: cout<<r<<" A"<<endl;break;
                    case 1: cout<<r<<" C"<<endl;break;
                    case 2: cout<<r<<" M"<<endl;break;
                    case 3: cout<<r<<" E"<<endl;break;
                    default: cout<<t<<endl; break;
                }
                break;
            }
        if (j == n) cout<<"N/A"<<endl;
    }    
}

 

posted on 2013-03-02 11:43  civi  阅读(147)  评论(0)    收藏  举报

导航