测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

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;

}    

上一题 下一题