PAT 1484. 最佳排名
原题链接
中等
作者:
leo123456
,
2020-08-20 17:05:17
,
所有人可见
,
阅读 265
#include<iostream>
#include<vector>
#include<unordered_map>
#include<algorithm>
#include<cmath>
using namespace std;
unordered_map<string,vector<int>> mp //存每个学生的信息
vector<int> grades[4]; //所以同学的四课成绩A C M E
char names[]="ACME";
int get_rank(vector<int>& v,int x)
{
for(int i=0;i<v.size();i++)
{
if(v[i]==x) return i+1;
}
return -1;
}
bool cmp(int a,int b)
{
return a>b;
}
int main()
{
int n,m;
cin>>n>>m;
for(int i=0;i<n;i++)
{
string id;
int temp[4]={0};
cin>>id;
for(int i=1;i<4;i++)
{
cin>>temp[i];
temp[0]+=temp[i];
}
temp[0]=round(temp[0]/3.0);
for(int i=0;i<4;i++)
{
mp[id].push_back(temp[i]);
grades[i].push_back(temp[i]);
}
}
for(int i=0;i<4;i++)
sort(grades[i].begin(),grades[i].end(),cmp); // 所以同学的A C M E从大到小排序,
while(m--)
{
string id;
cin>>id;
if(mp.count(id)==0) cout<<"N/A"<<endl;
else
{
int ans=n+1;
char c;
for(int i=0;i<4;i++)
{
int r=get_rank(grades[i],mp[id][i]); //找 mp 里id同学在grades中的排序情况
if(r<ans)
{
ans=r;
c=names[i];
}
}
cout<<ans<<' '<<c<<endl;
}
}
return 0;
}