1. 程式人生 > 其它 >7-5 悄悄關注 (25 分)

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;
    }

}