CF175B 题解

发布时间 2023-12-19 13:09:49作者: shimingxin1007

原题传送门


题目大意

如题目描述。

思路分析

\(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;
}