Hello, 2020!
题目背景
时针与分针重合在「零」的那一霎那,嘀嗒声便宣告了新一年的到来。
在过去的一年里,世事无常。屏幕面前的你可能不久前才听闻「OI」,也可能暂时地结束了竞赛生涯;可能在赛场上叱咤风云名列榜首,也可能独自承受着比赛失利的落寞。
无论如何,过去仍旧是过去,将来依然是将来。
以此题为开端,迎接你的 2020 吧!
题目描述
本场比赛有 n n n 名出题人, m m m 名选手。
出题人从 1 1 1 至 n n n 依次标号,选手从 1 1 1 至 m m m 依次标号。
比赛结束后选手的最终排名为 1 1 1 至 m m m 中其一,且互不相同。
报名结束后,第 i i i 位出题人看了看报名列表,对其他出题人说:「我觉得只有这 k i k_i ki 位选手有可能最终排名第一,他们分别是 a i , 1 , a i , 2 , … , a i , k i a_{i,1},a_{i,2},\dots,a_{i,k_i} ai,1,ai,2,…,ai,ki。其他人不可能最终排名第一。」
你面前屏幕上的这道题的出题人通过时空隧道,预先得知了谁是最终排名第一的选手。
出题人把这 n n n 位出题人的预测都告诉了你,还告诉你恰好只有 p p p 个出题人的预测是正确的。
请你求出哪些选手可能最终获得第一名,并以从小到大的顺序依次输出这些选手的编号。
输入格式
从标准输入中读取数据。
第一行,三个正整数 n , m , p n,m,p n,m,p,表示出题人数,选手数,与正确预测数。
接下来 n n n 行,每行第一个非负整数 k i k_i ki 表示第 i i i 位出题人预测可能最终排名第一的选手位数;接下来 k i k_i ki 个正整数 a i , 1 , a i , 2 , … , a i , k i a_{i,1},a_{i,2},\dots,a_{i,k_i} ai,1,ai,2,…,ai,ki,表示这位出题人预测可能最终排名第一的选手编号。
输出格式
输出数据至标准输出中。
第一行,输出一个非负整数,表示可能最终获得第一名的选手个数。
第二行,以从小到大的顺序依次输出这些选手的编号。
样例 #1
样例输入 #1
4 3 2
2 2 3
1 1
3 1 2 3
2 1 3
样例输出 #1
1
2
提示说明
子任务 1( 6 % 6\% 6%): n ≤ 20 n\leq 20 n≤20, m ≤ 20 m\leq 20 m≤20。
子任务 2( 30 % 30\% 30%): n ≤ 100 n\leq 100 n≤100, m ≤ 100 m\leq 100 m≤100, ∑ k i ≤ 1 0 4 \sum k_i \leq 10^4 ∑ki≤104。
子任务 3( 24 % 24\% 24%): n ≤ 1000 n\leq 1000 n≤1000, m ≤ 1000 m\leq 1000 m≤1000。
子任务 4( 40 % 40\% 40%):无特殊限制。
对于全部数据, 1 ≤ n ≤ 1 0 5 1\leq n\leq 10^5 1≤n≤105, 1 ≤ m ≤ 1 0 6 1\leq m\leq 10^6 1≤m≤106, 0 ≤ ∑ k i ≤ 1 0 6 0\leq \sum k_i \leq 10^6 0≤∑ki≤106, 0 ≤ p ≤ n 0\leq p\leq n 0≤p≤n。
代码内容
// #include <iostream>
// #include <algorithm>
// #include <cstring>
// #include <stack>//栈
// #include <deque>//队列
// #include <queue>//堆/优先队列
// #include <map>//映射
// #include <unordered_map>//哈希表
// #include <vector>//容器,存数组的数,表数组的长度
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=1e6+10;
ll a[N],s[N];
int main()
{
ll n,m,p;
cin>>n>>m>>p;
while(n--)
{
ll k;
cin>>k;
while(k--)
{
ll i;
cin>>i;
a[i]++;
}
}
ll sum=0;
for(ll i=1;i<=m;i++)
{
if(a[i]==p)
{
s[sum]=i;
sum++;
}
}
cout<<sum<<endl;
sort(s,s+sum);
for(ll i=0;i<sum;i++)
cout<<s[i]<<" ";
return 0;
}