题解:CF75B Facetook Priority Wall
Jayfeather2012 · · 题解
思路
定义一个 map 标记出现的朋友和他对印的优先级因子。
对于每次输入,若
最后,将朋友和朋友对应的优先级因子搬入结构体,根据优先级因子的大小和朋友名字的字典序进行排序后输出。
具体细节看代码吧~~
代码
#include <bits/stdc++.h>
using namespace std;
map < string,int > mp;//定义map
string x,y,s,t,w;
int n,m;
struct Node{
string name;
int p;
}a[1000005];
bool cmp(Node x,Node y){//排序函数
if(x.p!=y.p)return x.p>y.p;//先按优先级因子大小排
return x.name<y.name;//优先级因子大小相同,按名字字典序排
}
int point(string s){//根据题意计算优先级因子的增加值
if(s=="likes")return 5;
if(s=="commented")return 10;
return 15;
}
int main() {
cin>>s>>n;
while(n--){
cin>>x>>t;//X和动词
if(t!="likes")cin>>w;//若非likes输入on
cin>>y>>w;//Y和post
y.erase(y.size()-2);//删's
if(x==s)mp[y]+=point(t);
else if(y==s)mp[x]+=point(t);
//是和我交流,增加优先级因子
else {
mp.insert({x,0});
mp.insert({y,0});
}
//不是和我交流,插入名字
}
for(auto g:mp){
a[++m].name=g.first;
a[m].p=g.second;//搬入结构体
}
sort(a+1,a+m+1,cmp);//排序
for(int i=1;i<=m;++i)cout<<a[i].name<<"\n";//输出
return 0;
}