L2-021 点赞狂魔

一、题目

二、解题思路

  1. 统计每个人点赞的不同标签的数量:每行列出一位用户的点赞标签,这些标签可能有重复的,所以将用户的点赞标签存放在 set 里,通过 size() 函数获得点赞的不同标签的数量;
  2. 结构体包括用户的信息:姓名 name 、点赞标签的数量 sum 、点赞的不同标签的数量 cot;
  3. 冒牌排序对结构体进行排序,排序规则:按照 cot 降序排序,若 cot 相同,则按照 sum 升序排序。

三、代码

#include<iostream>
using namespace std;
#include<set>

struct User
{
	string name;
	int sum;
	int cot;
}a[105];

int main()
{
	int n;
	cin>>n;
	for(int i=0;i<n;i++)
	{
		cin>>a[i].name>>a[i].sum;
		set<int> t;
		for(int j=0;j<a[i].sum;j++)
		{
			int id;
			cin>>id;
			t.insert(id);
		}
		a[i].cot=t.size();
	}
	for(int i=0;i<n-1;i++)
	{
		for(int j=0;j<n-i-1;j++)
		{
			if(a[j].cot<a[j+1].cot || (a[j].cot==a[j+1].cot &&a[j].sum>a[j+1].sum))
			{
				struct User t=a[j];
				a[j]=a[j+1];
				a[j+1]=t;
			}
		}
	}
	cout<<a[0].name;
	for(int i=1;i<3;i++)
	{
		if(n>=(i+1))
		{
			cout<<" "<<a[i].name;
		}
		else
		{
			cout<<" "<<"-";
		}
	}
	return 0;
}

四、总结

        题目中 “如果有并列,则输出标签出现次数平均值最小的那个” 可以理解为 sum / cot 最小。若并列,则表示 cot 是相同的,所以找 sum 最小的那个即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值