题目
巨博是一种社交软件,用户可以在jubo软件中发巨博。一条巨博中可能提及一些其他用户,比如用户“罗祥说没办法”发了一条巨博:“今天给粉丝抽奖送一部手机。@大米手机 @巨博抽奖平台”,此时用户“大米手机”、“巨博抽奖平台”被“罗祥说没办法”提及。
现在有 N(1 < N < 10000)N(1<N<10000) 条巨博,其中的用户名已经被提取出来,用小于等于 100100 的正整数代替。
找到巨博热搜人物,即被提及次数最多的用户(如果有多个,找到编号最小的),并找出那些提及它的用户。
输入格式
第一行:巨博数量 NN,1 < N < 100001<N<10000。
接下来 NN行:每行表示一条巨博,内容为:
作者序号 aa,提及用户的数量 k(0 \le k \le 20)k(0≤k≤20),然后是 kk 个被提及的用户的序号 b_1,b_2...b_kb1,b2...bk;其中 aa 和 b_1,b_2...b_kb1,b2...bk 均为小于等于 100100 的自然数。
输出格式
第一行:被提及最多的用户的序号;
第二行:提及它的用户的序号(从小到大输出)
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int N = Integer.parseInt(input.nextLine());
int[] count=new int[102];
int mostc=0;//出现最多次的次数
int mostd = 0;//出现最多的数
List mostA=new ArrayList<>();//提到出现最多的用户的发布者
int [][]data=new int[N][22];//
String[] bk;
for (int i=0;i<N;i++){
bk = input.nextLine().split(" ");//获取一条
for (int j =0;j<bk.length;j++){
data[i][j]= Integer.parseInt(bk[j]);
if (j!=0&&j!=1) {//排除发布者和涉及人数
count[data[i][j]] += 1;
if(count[data[i][j]]>mostc){
mostd=data[i][j];
mostc=count[data[i][j]];
}
else if(count[data[i][j]]==mostc&&data[i][j]<mostd){
mostd=data[i][j];
mostc=count[data[i][j]];
}
}
}
}
for (int i =0;i<data.length;i++){
for (int j=2;j<=data[i][1]+1;j++){
if (data[i][j]==mostd){
mostA.add(data[i][0]);
}
}
}
System.out.println(mostd);
List list0=new ArrayList<>();
Collections.sort(mostA);
for (Object str:mostA){
if(!list0.contains(str)){
list0.add(str);
}
}
mostA.clear();
mostA.addAll(list0);
for (int i=0;i<mostA.size();i++){
System.out.print(mostA.get(i)+" ");
}
}
}