7-5 悄悄关注 (25 分)

题解

朴素的题目,注意几个坑点

  • 按用户ID字母序的升序输出可能是其悄悄关注的人
  • 即使这个人属于光明正大关注的,计算总关注数量的时候也要累加上

代码1

这个代码没有代码2通用,但是更好理解

#include <bits/stdc++.h>
using namespace std;
map<string,int>  mp;
int main()
{
    int n;cin>>n;
    for(int i=0;i<n;i++){
        string a;
        cin>>a;
        mp[a]=1;
    }
    int m;cin>>m;
    int num=0;
    double  cnt=0;//平均点赞数
    for(int i=0;i<m;i++){
        string a;cin>>a;
        int b;cin>>b;
        cnt+=b;
    if(mp[a]) mp[a]=-1;//如果存在,则为明显关注的人,一定不是我们答案,故把权值设为-1,代表删除该名字
    else mp[a]=b;
    }
    cnt/=m;
    int flag=1;
    for(pair<string,int> t: mp){
        if(t.second>=cnt){
            flag=0;
            cout<<t.first<<endl;
        }
    }
    if(flag) cout<<"Bing Mei You"<<endl;
    return 0;
}

代码2

如果题目要求其他变态的排序方式,这要写更好
map排序毕竟相对麻烦

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const double inf=0x3f3f3f3f;
map<string,int> mp;
string b[11111];
int main()
{
    int n;
    cin>>n;
    for(int i=0;i<n;i++){
        string t;
        cin>>t;
        mp[t]=1;
    }

    int m;
    cin>>m;
    double  cnt=0;
    for(int i=0;i<m;i++){
       
        int tt;
        cin>>b[i]>>tt;
        if(! mp[ b[i] ]){
             mp[b[i]]=tt;
        }
       else {
           b[i]="0";
       }
        cnt+=tt;
    }
    cnt/=m;
int flag=0;
sort(b,b+m);
    for(int i=0;i<m;i++){
        if(b[i]!="0"&&mp[b[i]]>cnt){
             cout<<b[i]<<endl;
             flag=1;
        } 
    }
    if(flag==0){
        cout<<"Bing Mei You"<<endl;
    }

}


posted @ 2021-12-13 21:22  kingwzun  阅读(176)  评论(0编辑  收藏  举报