洛谷-P5886 Hello, 2020!

洛谷-P5886 Hello, 2020!

原题链接:https://www.luogu.com.cn/problem/P5886


题目背景

时针与分针重合在「零」的那一霎那,嘀嗒声便宣告了新一年的到来。

在过去的一年里,世事无常。屏幕面前的你可能不久前才听闻「OI」,也可能暂时地结束了竞赛生涯;可能在赛场上叱咤风云名列榜首,也可能独自承受着比赛失利的落寞。

无论如何,过去仍旧是过去,将来依然是将来。

以此题为开端,迎接你的 2020 吧!

题目描述

本场比赛有 (n) 名出题人,(m) 名选手。

出题人从 (1)(n) 依次标号,选手从 (1)(m) 依次标号。

比赛结束后选手的最终排名为 (1)(m) 中其一,且互不相同。

报名结束后,第 (i) 位出题人看了看报名列表,对其他出题人说:「我觉得只有这 (k_i) 位选手有可能最终排名第一,他们分别是 (a_{i,1},a_{i,2},dots,a_{i,k_i})。其他人不可能最终排名第一。」

你面前屏幕上的这道题的出题人通过时空隧道,预先得知了谁是最终排名第一的选手。

出题人把这 (n) 位出题人的预测都告诉了你,还告诉你恰好只有 (p) 个出题人的预测是正确的。

请你求出哪些选手可能最终获得第一名,并以从小到大的顺序依次输出这些选手的编号。

输入格式

从标准输入中读取数据。

第一行,三个正整数 (n,m,p),表示出题人数,选手数,与正确预测数。

接下来 (n) 行,每行第一个非负整数 (k_i) 表示第 (i) 位出题人预测可能最终排名第一的选手位数;接下来 (k_i) 个正整数 (a_{i,1},a_{i,2},dots,a_{i,k_i}),表示这位出题人预测可能最终排名第一的选手编号。

输出格式

输出数据至标准输出中。

第一行,输出一个非负整数,表示可能最终获得第一名的选手个数。

第二行,以从小到大的顺序依次输出这些选手的编号。

输入输出样例

输入 #1

4 3 2
2 2 3
1 1
3 1 2 3
2 1 3

输出 #1

1
2

说明/提示

子任务 1((6\%)):(nleq 20)(mleq 20)

子任务 2((30\%)):(nleq 100)(mleq 100)(sum k_i leq 10^4)

子任务 3((24\%)):(nleq 1000)(mleq 1000)

子任务 4((40\%)):无特殊限制。

对于全部数据,(1leq nleq 10^5)(1leq mleq 10^6)(0leq sum k_i leq 10^6)(0leq pleq n)

C++代码

#include <iostream>
using namespace std;

int main() {
    int n, m, p, t, count=0;
    cin >> n >> m >> p;
    int k[n], a[m+1]={0}, ans[m];
    for (int i=0; i<n; ++i) {
        cin >> k[i];
        for (int j=0; j<k[i]; ++j) {
            cin >> t;
            ++a[t];
        }
    }
    for (int i=1; i<=m; ++i)
        if (a[i] == p)
            ans[count++] = i;
    cout << count << endl;
    for (int i=0; i<count; ++i)
        cout << ans[i] << ' ';
    cout << endl;
    return 0;
}
原文地址:https://www.cnblogs.com/yuzec/p/13507503.html