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;
}