题意很清楚,显然要用map连接string 和 int 那么问题就是在于最后的判断,也就是筛选环节,大于平均数好解决,那么没出现过该如何判断呢,嗯。一个直接的想法就是每次都遍历一遍关注列表,查询是否有该人,嗯,这样的话可以直接用find()就行了,但是遗憾的是最后一组数据会超时。所以再想想的话可以直接用两个map,另一组map直接再对关注列表进行标记,最后筛选时如果没有标记且大于平均数,就可以输出map的key
#include <bits/stdc++.h>
using namespace std;
vector<string> a; //创建一个足够大的字符串数组也是可以的
int main(){
int n;
cin>>n;
string s;
map<string,int> t,e; //两组map
for(int i=1;i<=n;i++){
cin>>s;
e[s]=1; //对关注列表里出现的人进行标记
a.push_back(s);
}
int m,x;
double sum=0;
cin>>m;
int okk=0; //用于判断是否存在暗暗关注的人
for(int i=1;i<=m;i++){
cin>>s>>x;
sum+=x; //累加
t[s]=x; //s和x关联起来
}
sum/=m;
for(auto i=t.begin();i!=t.end();i++){ //遍历vector动态数组
if(e[i->first]!=1&&(i->second>sum)){ //筛选
cout<<i->first<<endl; //true就输出string
okk=1;
}
}
if(!okk) cout<<"Bing Mei You";
return 0;
}