F - 我们什么时候能见面? POJ - 2028

F - 我们什么时候能见面? POJ - 2028

ICPC委员会希望尽快召开会议,解决下一届比赛中的每一个小问题。然而,委员会的成员都忙于疯狂地开发(可能是无用的)程序,以至于很难安排他们的会议日程。因此,为了确定会议日期,主席要求每个成员通过电子邮件发回一份方便的日期清单。你的任务是帮助主席,他现在正致力于比赛的其他问题,通过编写一个程序,从提交的列表中选择最佳日期。你的程序应该为大多数成员找到方便的日期。如果有不止一个这样的日子,最早是最好的。
Input 多组输入,每组输入以一行开始,其中包含委员会成员的数量和会议的法定人数。

N Q 这里,N表示委员会的规模,Q表示法定人数,都是正整数。N小于50,当然,Q小于等于N。

接下来是N行,每一行都用下面的格式描述委员会成员的方便日期。

M Date1 Date2 ... DateM
这里,M表示成员的方便日期数,它是一个大于或等于零的整数。行中剩余的项目是他/她的方便日期,是小于100的正整数,即1表示明天,2表示后天,依此类推。它们是按升序排列的,没有任何重复,并且由一个空格字符分隔。行既没有前置空格,也没有尾随空格。

包含两个0的行表示输入的结束。 Output
对于每组数据,打印一行,其中包含日期编号,以便最大数量的委员会成员使用。如果有不止一个这样的日期,打印最早的。但是,如果没有方便的日期来满足超过或等于成员的法定人数,则打印0。

Sample Input
3 2
2 1 4
0
3 3 4 8
3 2
4 1 5 8 9
3 2 5 9
5 2 4 5 7 9
3 3
2 1 4
3 2 5 9
2 2 4
3 3
2 1 2
3 1 2 9
2 2 4
0 0
Sample Output
4
5
0
2

思路

用个桶,统计一下每个议员,某个一天空闲的的一员的数量

代码

#include<iostream>
#include<cmath>
#include<cstdio>
#include<queue>
#include<cstring>
#include<algorithm>
#define ll long long
#define inf 0x3f3f3f3f
using namespace std;
int read()
{
    int res=0;char ch=0;
    while (!isdigit(ch))ch=getchar();
    while (isdigit(ch))res=(res<<3)+(res<<1)+(ch^48),ch=getchar();
    return res;
}
int ar[105];

int main()
{
    /* freopen("A.txt","r",stdin); */
    int n, m;
    while(scanf("%d %d", &n, &m) && n + m)
    {
        memset(ar, 0, sizeof(ar));
        int z;
        for(int i = 1; i <= n; i ++)
        {
            scanf("%d", &z);
            int day;
            for(int j = 1; j <= z; j ++)
                scanf("%d", &day), ar[day] ++;
        }
        
        int ans = 0;
        int last = -1;
        for(int i = 1; i <= 100; i ++)
        {
            if(ar[i] >= m && last < ar[i])
                ans = i, last = ar[i];
        }
        printf("%d\n", ans);
    }


    return 0;
}

猜你喜欢

转载自www.cnblogs.com/lql-nyist/p/12636776.html