[Luogu P5886 Hello,2020!]题解

Luogu P5886

好久没有写题了,感觉思维有些退化,明明是到简单题却交了三遍才过

对于每个评委可以钦定多个人得第一,但是只有P个评委钦点到了真正的第一名

呢么对于真正的第一名他一定被P个评委钦定过

所以我们统计每个人被评委钦定的次数,然后统计哪些人被钦定了P次,最后依次输出即可

好吧为啥我提交了三次了,第一次我统计所以大于等于P次的人,第二次我输了一列,题目要求输出一行

emm,还是自己傻逼

其实我觉得这题可以加强一下难度,增加数据范围,并且不保证数据合法还是可以随便用个log的数据结构维护下的吧

#include <bits/stdc++.h>
using namespace std;


const int N = 1e6 + 5;
int n , m , p , f[N] , cnt ;
vector < int > ans;


inline int read()
{
    register int x = 0;
    register char ch = getchar();
    for( ; ch < '0' || ch > '9' ; ch = getchar() );
    for( ; ch >= '0' && ch <= '9' ; x = ( x << 3 ) + ( x << 1 ) + ch - '0' , ch = getchar() );
    return x;
} 


int main()
{
    n = read() , m = read() , p = read();
    for( register int i = 1 , k ; i <= n ; i ++ )
    {
        k = read();
        for( register int j = 1 , t ; j <= k ; j ++ )
        {
            t = read();
            f[t] ++;
        }
    }
    for( register int i = 1 ; i <= m ; i ++ )
    {
        if( f[i] != p ) continue;
        cnt ++;
        ans.push_back( i );
    }
    printf( "%d\n" , cnt );
    for( auto it : ans ) printf( "%d " , it );
    puts("");
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/Mark-X/p/12347033.html