1012 The Best Rank - 模擬
阿新 • • 發佈:2018-11-09
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; } }