A46323. 话题焦点人物微博提供了一种便捷的交流平台。一条微博中,可以提及其它用户。例如你发出一条微博为:“期末考试顺利 @蒜头君 @花椰菜”,则你提及了蒜头君和花椰菜两位用户。我们收集了 N(1 < N < 10000)N(1<N<10000) 条微博,并已将其中的用户名提取出来,用小于等于 100 的正整数表示。通过分析这些数据,我们希望发现大家的话题焦点人物,即被提及最多的人(如果有多个,找到编号最小…
题目描述
话题焦点人物
微博提供了一种便捷的交流平台。一条微博中,可以提及其它用户。例如你发出一条微博为:“期末考试顺利 @蒜头君 @花椰菜”,则你提及了蒜头君和花椰菜两位用户。
我们收集了 N(1 < N < 10000)N(1<N<10000) 条微博,并已将其中的用户名提取出来,用小于等于 100 的正整数表示。
通过分析这些数据,我们希望发现大家的话题焦点人物,即被提及最多的人(如果有多个,找到编号最小的),并找出那些提及它的人。
输入格式
输入共两部分:
第一部分是微博数量 N,1 < N < 100001<N<10000。
第二部分是 N条微博,每条微博占一行,表示为:
发送者序号 a,提及人数 k(0≤k≤20),然后是 k 个被提及者序号 b1,b2,b3…bk其中 a 和b1,b2,b3…bk均为大于 0 小于等于 100 的整数。相邻两个整数之间用单个空格分隔。
输出格式
输出分两行:
第一行是被提及最多的人的序号;
第二行是提及它的人的序号,从小到大输出,相邻两个数之间用单个空格分隔。同一个序号只输出一次
样例输入
5
1 2 3 4
1 0
90 3 1 2 4
4 2 3 2
2 1 3样例输出
3
1 2 4代码实现
代码思路:用结构体记录发帖人的号码和@对象,本可以用数组来进行遍历并输出被@次数最多的号码。但由于需要记录@人的号码,采用结构体记录。涉及到不能重复输出,可以用号码表示数组下标的方式进行记录(当该下标对应都数组的值大于0时输出)有效去重。
参考答案
#include<iostream>
using namespace std;
struct node{ //定义结构体用来存储用户发帖的号码和@的人数和被@的序号
int number;
int k;
int a[101];
}stu[10001];
struct resurt{ //用来记录@他人的序号
int num;
int forget[101];
}res[101];
int main(){
int per,max=0;
cin>>per;
for(int i = 0 ; i < per ; i++){
cin>>stu[i].number>>stu[i].k;
for(int j=1;j<=stu[i].k;j++){
cin>>stu[i].a[j-1];
res[stu[i].a[j-1]].num++; //记录被@的人的次数
res[stu[i].a[j-1]].forget[stu[i].number]++; //记录@他的人的序号
}
}
for(int i = 0; i < 101;i++){ //找到被@最多人的序号并且是最小
if(res[i].num>max){
max=res[i].num;
}
}
for(int i = 0; i < 101;i++){ //遍历输出
if(max==res[i].num){
cout<<i<<endl;
for(int j=0;j<101;j++){
if(res[i].forget[j]>=1){
cout<<j<<" ";
}
}
break;
}
}
return 0;
}答案解析
#include <iostream>
#include <vector>
#include <algorithm>
#include <set>
using namespace std;
int main() {
int N;
cin >> N;
// 统计每个人被提及的次数
vector<int> mentionCount(101, 0);
// 记录每个被提及者的发送者集合
vector<set<int>> senders(101);
for (int i = 0; i < N; i++) {
int sender, k;
cin >> sender >> k;
for (int j = 0; j < k; j++) {
int mentioned;
cin >> mentioned;
mentionCount[mentioned]++;
senders[mentioned].insert(sender);
}
}
// 找出被提及最多的人
int maxCount = 0;
int targetUser = 0;
for (int i = 1; i <= 100; i++) {
if (mentionCount[i] > maxCount) {
maxCount = mentionCount[i];
targetUser = i;
}
}
// 输出结果
cout << targetUser << endl;
for (int user : senders[targetUser]) {
cout << user << " ";
}
cout << endl;
return 0;
}