专栏文章
题解:CF75B Facetook Priority Wall
CF75B题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @miqdhfl3
- 此快照首次捕获于
- 2025/12/04 03:01 3 个月前
- 此快照最后确认于
- 2025/12/04 03:01 3 个月前
思路
定义一个 map 标记出现的朋友和他对印的优先级因子。
对于每次输入,若 或 是我,那么就根据题意,增加我和另一个人的优先级因子,若不是,就把 或 插入 map 中,利用 map 会去重的特性,就可以统计出我的所有朋友和我的优先级因子。
最后,将朋友和朋友对应的优先级因子搬入结构体,根据优先级因子的大小和朋友名字的字典序进行排序后输出。
具体细节看代码吧~~
对于每次输入,若 或 是我,那么就根据题意,增加我和另一个人的优先级因子,若不是,就把 或 插入 map 中,利用 map 会去重的特性,就可以统计出我的所有朋友和我的优先级因子。
最后,将朋友和朋友对应的优先级因子搬入结构体,根据优先级因子的大小和朋友名字的字典序进行排序后输出。
具体细节看代码吧~~
代码
CPP#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;
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...