有点讨厌的模拟。难度应该是 普及-。
先输入自己的名字。在输入数量。
注意:因为下面要使用 getline,所以,输入完数量 cin.get()。
之后,用 getline 输入
对于每个字符串,用 vector 动态数组
我们知道,
's 去掉。
如果
和上面情况的处理方法一样。
需要注意,
like,第二个人名应该是
排序需要自己写一个自定义排序函数。如果分数相同,比较姓名字典序。否则比较分数大小。
如果运行目前的程序,一定输入样例
怎么回事?因为那两个人一分不得。
所以,我们需要“装模做样”地调用一下两个人名所对应的键值,这样 map 里就会增加人数。详见代码中注释打感叹号的部分。
这么修改过后,需要注意,不要输出自己的信息。
千万不要抄,小心棕名!
xxxxxxxxxx// 75B Facetook Priority Wallusing namespace std;
bool cmp(pair<string, int> a, pair<string, int> b){ if(a.second==b.second) return a.first<b.first; return a.second>b.second;}
int main(){ string me; cin>>me; int n; cin>>n; cin.get(); map<string, int> m; for(int k=0; k<n; k++) { string s; getline(cin, s); s+=' '; vector<string> a; string cur; for(int i=0; i<s.size(); i++) { if(s[i]!=' ') cur+=s[i]; else { a.push_back(cur); cur.clear(); } } string o=a[1]; if(o=="posted") { a[3].pop_back(); a[3].pop_back(); m[a[0]]; m[a[3]]; if(a[0]==me) m[a[3]]+=15; if(a[3]==me) m[a[0]]+=15; } else if(o=="commented") { a[3].pop_back(); a[3].pop_back(); m[a[0]]; m[a[3]]; if(a[0]==me) m[a[3]]+=10; if(a[3]==me) m[a[0]]+=10; } else { a[2].pop_back(); a[2].pop_back(); m[a[0]]; m[a[2]]; if(a[0]==me) m[a[2]]+=5; if(a[2]==me) m[a[0]]+=5; } } pair<string, int> p[m.size()]; int k=0; for(auto x:m) if(x.first!=me) p[k++]=x; sort(p, p+k, cmp); for(auto x:p) cout<<x.first<<endl; return 0;}All Rights Reserved 2022 Wang Zhanrui