分析:题意较好理解,解题的时候用map先标记是否在关注列表,在用另一个map标记点赞次数,并累加点赞数,算出平均值,最后利用set的自动排序存储答案。
做题遇到的“坎”有:1、字符数组转化到字符串(解决方法:emmm是可以直接赋值的)2、对STL中的容器使用并不熟练,输入输出查找插入还要再多多使用。
1 #include <iostream> 2 #include<cstdio> 3 #include<map> 4 #include<vector> 5 #include<set> 6 #include<string> 7 #include<cstring> 8 #include<sstream> 9 using namespace std; 10 const int N = 1e5 + 10; 11 map<string,int> mp,vis; 12 vector<string>vec; 13 set<string>ans; 14 int main() 15 { 16 int n,f,sum=0; 17 double ave; 18 string ss; 19 char na[N]; 20 scanf("%d",&n); 21 getchar(); 22 getline(cin,ss); 23 stringstream sstream(ss); 24 while (sstream) 25 { 26 string name; 27 sstream>>name; 28 mp[name] = 1; 29 } 30 scanf("%d",&n); 31 getchar(); 32 for(int i = 1; i <= n; i ++) 33 { 34 string name; 35 scanf("%s%d",na,&f); 36 sum+=f; 37 name = na; 38 if(mp[name]!=1) 39 { 40 vis[name]=f; 41 vec.push_back(name); 42 } 43 } 44 ave=sum/(double)n; 45 for(int i = 0; i<vec.size(); i++) 46 { 47 if(vis[vec[i]]>ave) 48 ans.insert(vec[i]); 49 } 50 set<string>::iterator it = ans.begin(); 51 if(it==ans.end()) 52 cout<<"Bing Mei You "; 53 else{ 54 for(it=ans.begin();it != ans.end();it ++) 55 cout<<*it<<endl; 56 } 57 return 0; 58 }