1012 The Best Rank [模拟]
Posted fta-macro
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1012 The Best Rank [模拟]相关的知识,希望对你有一定的参考价值。
注意一下相同分数的排名相同,比如98,97,97,96的排名是1,2,2,4
#include <bits/stdc++.h> using namespace std; #define maxn 100005 struct Student string name; int c,m,e,ra,rc,rm,re; double avg; stu[maxn]; char c[]=‘A‘,‘C‘,‘M‘,‘E‘; bool acmp(Student a,Student b) return a.avg>b.avg; bool ccmp(Student a,Student b) return a.c>b.c; bool mcmp(Student a,Student b) return a.m>b.m; bool ecmp(Student a,Student b) return a.e>b.e; map<string,int> vis,ma,mb; int n,m; int main() vis.clear(); cin>>n>>m; for(int i=0;i<n;i++) cin>>stu[i].name>>stu[i].c>>stu[i].m>>stu[i].e; stu[i].avg=(double)(stu[i].c+stu[i].m+stu[i].e)/3.0; vis[stu[i].name]=1; sort(stu,stu+n,acmp); int p=1; stu[0].ra=1; for(int i=1;i<n;i++) if(stu[i].avg==stu[i-1].avg) stu[i].ra=p; else p=i+1; stu[i].ra=p; sort(stu,stu+n,ccmp); p=1; stu[0].rc=1; for(int i=1;i<n;i++) if(stu[i].c==stu[i-1].c) stu[i].rc=p; else p=i+1; stu[i].rc=p; sort(stu,stu+n,mcmp); p=1; stu[0].rm=1; for(int i=1;i<n;i++) if(stu[i].m==stu[i-1].m) stu[i].rm=p; else p=i+1; stu[i].rm=p; sort(stu,stu+n,ecmp); p=1; stu[0].re=1; for(int i=1;i<n;i++) if(stu[i].e==stu[i-1].e) stu[i].re=p; else p=i+1; stu[i].re=p; int minn,crs,ans; for(int i=0;i<n;i++) minn=n+1; if(stu[i].ra<minn) ans=stu[i].ra; minn=stu[i].ra; crs=0; if(stu[i].rc<minn) ans=stu[i].rc; minn=stu[i].rc; crs=1; if(stu[i].rm<minn) ans=stu[i].rm; minn=stu[i].rm; crs=2; if(stu[i].re<minn) ans=stu[i].re; minn=stu[i].re; crs=3; ma[stu[i].name]=ans; mb[stu[i].name]=crs; string s; while(m--) cin>>s; if(vis[s]==1) cout<<ma[s]<<" "<<c[mb[s]]<<endl; else cout<<"N/A"<<endl;
以上是关于1012 The Best Rank [模拟]的主要内容,如果未能解决你的问题,请参考以下文章