7-5 悄悄關注 (25 分)
阿新 • • 發佈:2021-12-13
題解
樸素的題目,注意幾個坑點
- 按使用者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; } }