L2-021 点赞狂魔

题目 L2-021 点赞狂魔

image-358ec5e5

思路分析

image-edfe2107

代码实现

#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
using ll = long long;
using ull = unsigned long long;
using PII = pair<int,int>;
using Pll = pair<ll,ll>;
int dx[4]={-1,0,1,0},dy[4]={0,1,0,-1};
const int inf = 0x3f3f3f3f;

struct People{
	string name;
	set<int> likes;
	double aver;

	bool operator<(const People& rhs) const{
		if(likes.size()!=rhs.likes.size())
			return likes.size()>rhs.likes.size();
		return aver<rhs.aver;
	}
};

vector<People> peoples;

int main(){
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);

	int n;cin>>n;
	while(n--){
		string name;int k;
		cin>>name>>k;
		set<int> curLikes;
		for(int i=0;i<k;i++){
			int tagId;cin>>tagId;
			curLikes.insert(tagId);
		}
		double curAver=k*1.0/curLikes.size();
		peoples.push_back({name,curLikes,curAver});
	}

	sort(peoples.begin(),peoples.end());

	vector<string> res;
	for (int i=0;i<3;i++) {
        if(i<peoples.size()){
            res.push_back(peoples[i].name);
        } else {
            res.push_back("-");
        }
    }

    cout<<res[0];
    for(int i=1;i<3;i++) {
        cout<<" "<<res[i];
    }

	return 0;
}

同类题型

视频讲解


⬅️ L2-020 功夫传人 🏠 00-天梯赛 ➡️ L2-022 重排链表