题目大意
如题目描述。
思路分析
\(1≤n≤1000\),很明显 \(\mathcal{O(n^2)}\) 不超时,使用结构体,暴力即可。
利用双循环求出名字相同的结构体并判断最高分,再根据字典序排序,再双循环求出比自己优秀人数,输出即可。
代码:
/*Written by smx*/
#include<bits/stdc++.h>
using namespace std;
struct node{
string name;
int score_max,ans;
}s[1005];
int n,m;
bool cmp(node a,node b)
{
return a.name<b.name;
}
int main()
{
//freopen(".in","r",stdin);
//freopen(".out","w",stdout);
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>n;
for(int i=1;i<=n;i++)
{
int flag=0;
node t;
cin>>t.name>>t.score_max;
for(int j=1;j<=m;j++)
{
if(s[j].name==t.name)
{
s[j].score_max=max(s[j].score_max,t.score_max);
flag=1;
break;
}
}
if(!flag)
{
s[++m].name=t.name;
s[m].score_max=t.score_max;
}
}
sort(s+1,s+m+1,cmp);
cout<<m<<"\n";
for(int i=1;i<=m;i++)
{
int cnt=0;
for(int j=1;j<=m;j++)
{
if(s[i].score_max<s[j].score_max)
{
cnt++;
}
}
if(cnt*1.0/m>0.5)
{
cout<<s[i].name<<" "<<"noob\n";
}
else if(cnt*1.0/m>0.2)
{
cout<<s[i].name<<" "<<"random\n";
}
else if(cnt*1.0/m>0.1)
{
cout<<s[i].name<<" "<<"average\n";
}
else if(cnt*1.0/m>0.01)
{
cout<<s[i].name<<" "<<"hardcore\n";
}
else
{
cout<<s[i].name<<" "<<"pro\n";
}
}
return 0;
}
标签:node,name,双循环,int,题解,CF175B,score
From: https://www.cnblogs.com/shimingxin1007/p/17913499.html