- 题目链接:L2-021 点赞狂魔
- 考查知识:结构体排序
- 题意描述:
- 给定n个用户的姓名,每个用户关注的k个标签,标签可能重复
- 统计每个人点赞的不同标签的数量,找出数量最大的前3名,如果有并列,则输出标签出现次数平均值最小的那个
- 思路简析:按要求结构体排序即可
- 具体代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=1e2+10; struct person{ string name;//用户姓名 int cn;//点赞的标签数 double ave;//标签出现次数平均值 }p[N]; bool cmp(person a,person b){ if(a.cn!=b.cn)return a.cn>b.cn;//按点赞的不同标签的数量降序 else return a.ave<b.ave;//标签出现次数平均值升序 } int main(){ int n,m,t; string s; cin>>n; for(int i=0;i<n;i++){ cin>>s>>m; set<int>se;//关注的标签可能有重合所以需要去重处理 for(int j=0;j<m;j++){ cin>>t; se.insert(t); } p[i]={s,se.size(),(double)m/se.size()}; } sort(p,p+n,cmp); for(int i=0;i<3;i++){ if(i)cout<<' '; if(i<min(3,n))cout<<p[i].name; else cout<<'-'; } return 0; }
L2-021 点赞狂魔(结构体排序)
最新推荐文章于 2024-06-09 15:03:53 发布