1. 程式人生 > >1012 The Best Rank - 模擬

1012 The Best Rank - 模擬

rank有名次的意思,記住了嗎!

qwq好吧我第一次都沒懂題,就是模擬,附上醜陋程式碼

還有一個教訓是:用ios::sync_with_stdio(false);加速的時候,就不要在用scanf和printf啦!這次就出現了錯誤

具體解釋見這個部落格~:https://www.cnblogs.com/cytus/p/7763569.html

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<string>
#include<cstring>
#include<queue>
#include<cmath>
#include<set>
#include<map>
#define ll long long
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
using namespace std;
const int N=2010;
struct A{
    string id;
    int C,M,E,A;
}stu[N];
int c[N],mm[N],e[N],a[N];
map<string,int>ran;
map<string,char>ke;
int main(){
    int n,m;
    ios::sync_with_stdio(false);
    cin>>n>>m;
    string s;
    for(int i=0;i<n;i++){
        cin>>stu[i].id;
        cin>>stu[i].C>>stu[i].M>>stu[i].E;
        c[i]=stu[i].C;mm[i]=stu[i].M;e[i]=stu[i].E;
        stu[i].A=round((double)(stu[i].C+stu[i].M+stu[i].E)/3);
        a[i]=stu[i].A;
    }
    sort(a,a+n);
    sort(c,c+n);
    sort(mm,mm+n);
    sort(e,e+n);
    for(int i=0;i<n;i++){//a,c,m,e
        int r1=upper_bound(a,a+n,stu[i].A)-a;
        r1=n-r1+1;
        ran.insert(pair<string,int>(stu[i].id,r1));
        ke.insert(pair<string,char>(stu[i].id,'A'));
        if(r1==1)continue;
        int r2=upper_bound(c,c+n,stu[i].C)-c;
        r2=n-r2+1;
        if(r2<ran[stu[i].id]){
            ran[stu[i].id]=r2;
            ke[stu[i].id]='C';
        }
        int r3=upper_bound(mm,mm+n,stu[i].M)-mm;
        r3=n-r3+1;
        if(r3<ran[stu[i].id]){
            ran[stu[i].id]=r3;
            ke[stu[i].id]='M';
        }
        int r4=upper_bound(e,e+n,stu[i].E)-e;
        r4=n-r4+1;
        if(r4<ran[stu[i].id]){
            ran[stu[i].id]=r4;
            ke[stu[i].id]='E';
        }
    }
    while(m--){
        cin>>s;
        if(ran.find(s)==ran.end())cout<<"N/A"<<endl;
        else cout<<ran[s]<<" "<<ke[s]<<endl;
    }
}