有点讨厌的模拟。难度应该是 普及-。
先输入自己的名字。在输入数量。
注意:因为下面要使用 getline,所以,输入完数量 cin.get()
。
之后,用 getline 输入
对于每个字符串,用 vector 动态数组
我们知道,
's
去掉。
如果
和上面情况的处理方法一样。
需要注意,
like,第二个人名应该是
排序需要自己写一个自定义排序函数。如果分数相同,比较姓名字典序。否则比较分数大小。
如果运行目前的程序,一定输入样例
怎么回事?因为那两个人一分不得。
所以,我们需要“装模做样”地调用一下两个人名所对应的键值,这样 map 里就会增加人数。详见代码中注释打感叹号的部分。
这么修改过后,需要注意,不要输出自己的信息。
千万不要抄,小心棕名!
xxxxxxxxxx
// 75B Facetook Priority Wall
using 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