1141 PAT Ranking of Institutions (25 分)
原题链接
- 大致题意
- 思路
- AC代码
1.大致题意
分类讨论,求出单位排名,总分,单位人数
2.思路:
直接模拟就ok了~(水题)
注意浮点数化为int
(int)(X+1e-8);
3.AC代码:
#include<bits/stdc++.h>
using namespace std;
struct node
{
string name;
double score;
int num;
};
bool cmp(const node& a,const node& b)
{
if(a.score!=b.score) return a.score>b.score;
else if(a.num!=b.num) return a.num<b.num;
else return a.name<b.name;
}
int main()
{
#ifdef ONLINE_JUDGE
#else
{
freopen("2.txt","r",stdin);
}
#endif
int n;
cin>>n;
unordered_map<string,node>mp;//学校名字-node的映射
for(int i=0;i<n;i++)
{
string id,sname;
double sc;
cin>>id>>sc>>sname;
if(id[0]=='B') sc/=1.5;
else if(id[0]=='T') sc*=1.5;
for(auto& c:sname) c=tolower(c);
mp[sname].name=sname;
mp[sname].score+=sc;
mp[sname].num++;
}
vector<node>v;
for(auto it:mp)
{
it.second.score=(int)(it.second.score+1e-8);
v.push_back(it.second);
}
sort(v.begin(),v.end(),cmp);
cout<<v.size()<<endl;
int rank=1;
for(int i=0;i<v.size();i++)
{
auto t=v[i];
if(i&&t.score!=v[i-1].score) rank=i+1;
printf("%d %s %d %d\n",rank,t.name.c_str(),(int)t.score,t.num);
}
return 0;
}
喵~