题目描述
RC-v2 含茶量
分数 25
作者 陈越
单位 浙江大学
ChatGPT(全名:Chat Generative Pre-trained Transformer)近期成为网络讨论的热点话题之一。本题就请你根据某社交网络中发帖的情况,统计每个人帖子中含有 ChatGPT(不区分大小写)的数量(简称“含茶量”),找出最热衷于讨论这个话题的人,即含茶量排前三的人。
输入格式:
输入在第一行中给出正整数:N(≤10
4
),为参加统计的帖子数量。
随后给出 N 条帖子的信息,每条格式为:第一行给出发帖人 ID,是一个长度不超过 10 位的非空数字串;第二行给出非空的帖子的内容,由不超过 140 个英文字母、数字、空格、标点(只包括 ?、, 和 .)组成,以回车结束(回车不算在 140 字内)。
输出格式:
分三行输出含茶量最高的前三个 ID,及其含茶量。有并列时按 ID 的字典序递增输出;如果有含茶量的 ID 不到三个,那么有几个就输出几个,但含茶量为 0 的不要输出。数字间以 1 个空格分隔,行首尾不得有多余空格。
题目保证至少有一个输出。
样例
5
1010
I am not interested in ChatGPT.
233
I am gonna talk about chatgpt, and Chatgpt, and CHATGPT
233
they are all ChatGPT
2
I am gonna talk about chatgpt, and Chatgpt, and CHATGPT
0002
chatgp, hatGPT and Chatppt, are they all ChatGPTs?
输出样例:
233 4
2 3
0002 1
C++ 代码
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
#define int long long
#define FAST ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
#define endl '\n'
#define For(i, x) for (int i = 0; i < x; i++)
#define For1(i, x) for (int i = 1; i <= x; i++)
int n;
string s,num;
vector<pair<string,int>>v;//等会用来排序的
unordered_map<string,int>m;//用来计数的
bool cmp(pair<string,int>a,pair<string,int>b){
if(a.second==b.second)return a.first<b.first;
else return a.second>b.second;
}
signed main(){
FAST
cin>>n;
For(j,n){
int cnt=0;
cin>>num;
getline(cin,s);//吸收回车
getline(cin,s);//包括空格的读取
For(i,s.size())s[i]=tolower(s[i]);//转小写
For(i,s.size()){
if(s.substr(i,7)=="chatgpt")cnt++;// substr 剪出gpt长度的字符串
}
m[num]+=cnt;
}
for(auto t:m)v.push_back(t);//压到数组里好排序
sort(v.begin(),v.end(),cmp);
if(v.size()<3)n=v.size();
else n=3;
For(i,n){
if(!v[i].second)break;
cout<<v[i].first<<" "<<v[i].second<<endl;}
return 0;
}
原题链接
https://pintia.cn/problem-sets/1693098244534091776/exam/problems/type/7?problemSetProblemId=1693098304160260097&page=0