【题目链接】
【题目考点】
1. 计数数组
2. 求最值
【解题思路】
设一个计数数组ct,ct[i]
表示i被提到的次数。设布尔数组g,g[i][j]
表示i是否提到j。
输入数据,构造ct数组和g数组。
求ct数组最大值的下标mxi,即为被提到最多的人。根据g数组,输出提到mxi的人。
【题解代码】
解法1:
#include<bits/stdc++.h>
using namespace std;
#define N 105
bool g[N][N];//g[i][j]:第i人是否提到第j人
int n, k, a, b, mxi = 1, ct[N];//ct[i]:第i人被提到的次数
int main()
{
cin >> n;
while(n--)
{
cin >> a >> k;
for(int i = 1; i <= k; ++i)
{
cin >> b;
ct[b]++;//b被提到的次数加1
g[a][b] = true;//a提到b
}
}
for(int i = 1; i <= 100; ++i)
{
if(ct[i] > ct[mxi])
mxi = i;//求被提到次数最多的人
}
cout << mxi << endl;
for(int i = 1; i <= 100; ++i)
{
if(g[i][mxi])//如果i提到过mxi
cout << i << ' ';
}
return 0;
}