团体天梯练习 L2-019 悄悄关注

L2-019 悄悄关注

新浪微博上有个“悄悄关注”,一个用户悄悄关注的人,不出现在这个用户的关注列表上,但系统会推送其悄悄关注的人发表的微博给该用户。现在我们来做一回网络侦探,根据某人的关注列表和其对其他用户的点赞情况,扒出有可能被其悄悄关注的人。

输入格式:

输入首先在第一行给出某用户的关注列表,格式如下:

人数 \(N\) 用户 \(1\) 用户 \(2\) …… 用户 \(N\)
其中 \(N\) 是不超过 5000 的正整数,每个用户 \(i\)\(i = 1, ..., N\) )是被其关注的用户的 \(ID\) ,是长度为4位的由数字和英文字母组成的字符串,各项间以空格分隔。

之后给出该用户点赞的信息:首先给出一个不超过10000的正整数 \(M\) ,随后 \(M\) 行,每行给出一个被其点赞的用户 \(ID\) 和对该用户的点赞次数(不超过1000),以空格分隔。注意:用户 \(ID\) 是一个用户的唯一身份标识。题目保证在关注列表中没有重复用户,在点赞信息中也没有重复用户。

输出格式:

我们认为被该用户点赞次数大于其点赞平均数、且不在其关注列表上的人,很可能是其悄悄关注的人。根据这个假设,请你按用户 \(ID\) 字母序的升序输出可能是其悄悄关注的人,每行1个 \(ID\) 。如果其实并没有这样的人,则输出“Bing Mei You”。

输入样例1:

10 GAO3 Magi Zha1 Sen1 Quan FaMK LSum Eins FatM LLao
8
Magi 50
Pota 30
LLao 3
Ammy 48
Dave 15
GAO3 31
Zoro 1
Cath 60

输出样例1:

Ammy
Cath
Pota

输入样例2:

11 GAO3 Magi Zha1 Sen1 Quan FaMK LSum Eins FatM LLao Pota
7
Magi 50
Pota 30
LLao 48
Ammy 3
Dave 15
GAO3 31
Zoro 29

输出样例2:

Bing Mei You


解题思路

水题。按照题意模拟即可,先将所有关注列表内的人放入到一个集合中,然后处理 \(M\) 个用户及其点赞次数,平均值只要在过程中累加最后再除以总数即可,最后将每个点赞数超过平均值的且不存在与关注列表中的人存储起来,再排个序就行了。

/*   一切都是命运石之门的选择  El Psy Kongroo  */
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<vector>
#include<queue>
#include<deque>
#include<stack>
#include<map>
#include<set>
#include<bitset>
#include<cmath>
#include<functional>
using namespace std;

typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> pii;
typedef pair<int, pii> piii;
typedef pair<double, double> pdd;
typedef pair<string, int> psi;
typedef __int128 int128;
#define x first
#define y second
const int inf = 0x3f3f3f3f, mod = 1e9 + 7;


const int N = 5010;
int n, m, idx;
set<string> st;
map<string, int> cnt;
int sum;
double ave;
vector<string> res;

void read(){
    cin >> n;
    for(int i = 1; i <= n; i ++ ){
        string cur; cin >> cur;
        st.insert(cur);
    }
    cin >> m;
    for(int i = 1; i <= m; i ++ ){
        string cur; cin >> cur;
        int x; cin >> x;
        cnt[cur] = x;
        sum += x;
    }
}

void show(){
    if(res.empty()) cout << "Bing Mei You" << endl;
    else for(auto &x : res) cout << x << endl;
}

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

    read();

    ave = sum * 1.0 / m;
    for(auto &[s, x] : cnt)
        if(!st.count(s) && x > ave) res.push_back(s);

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

    show();

    return 0;
}
posted @ 2023-04-18 14:11  MarisaMagic  阅读(11)  评论(0编辑  收藏  举报