专栏文章

题解:CF75B Facetook Priority Wall

CF75B题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@miqdhfl3
此快照首次捕获于
2025/12/04 03:01
3 个月前
此快照最后确认于
2025/12/04 03:01
3 个月前
查看原文

思路

定义一个 map 标记出现的朋友和他对印的优先级因子。
对于每次输入,若 XXYY 是我,那么就根据题意,增加我和另一个人的优先级因子,若不是,就把 XXYY 插入 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 条评论,欢迎与作者交流。

正在加载评论...