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