1 条题解
-
0
题目描述
ICPC组委会希望尽快召开会议,讨论下届比赛的各种细节。然而,委员会成员们都忙于疯狂开发(可能无用的)程序,很难协调出共同的空闲时间。因此,主席要求每位成员通过邮件提交自己方便的开会日期列表。你的任务是编写一个程序,帮助主席从这些列表中选出最佳的开会日期。
选择规则:
- 选择最多成员都方便的日期。
- 如果有多个这样的日期,选择最早的一个。
- 如果没有日期能满足**法定人数(quorum)**要求,则输出。
输入格式
每个测试用例以两个整数和开头:
表示委员会成员人数()。
表示会议法定人数()。
接下来的行,每行描述一个成员的方便日期:第一个整数表示该成员的方便日期数量()。随后是个严格递增的正整数(),表示具体的方便日期(=明天,=后天,依此类推).输入以结束。输出格式
对于每个测试用例,输出一行:
- 满足最多成员方便的最早日期。
- 如果没有日期满足至少人方便,则输出。
示例
输入:
3 2 3 1 5 7 2 3 5 2 5 6 2 2 1 3 1 4 0 0
输出:
5 0
解题思路
- 统计日期频率:用哈希表统计每个日期被多少成员选中。
- 筛选有效日期:
- 仅保留频率的日期。
- 若没有这样的日期,直接返回。
- 选择最佳日期:
- 在所有有效日期中,选择频率最高的。
- 若频率相同,选择数值最小的(即最早的)。
C++代码实现
#include<stdio.h> #include<string.h> int a[105]; int main() { int n,q; while(~scanf("%d%d",&n,&q) && n && q) { int m,temp,max,count,d; max=temp=count=0; memset(a,0,sizeof(a)); while(n--){ scanf("%d",&m); for(int i=0;i<m;i++){ scanf("%d",&d); a[d]++; if(temp<d) temp=d; } } for(int i=0;i<=temp;i++){ if(max<a[i]) { max=a[i]; count = i; } } if(max<q) printf("0\n"); else printf("%d\n",count); } }
代码说明
- 输入处理:使用
map
统计每个日期的出现次数。 - 筛选逻辑:
- 遍历
map
,记录满足人以上的最高频日期。 - 频率相同时,选择更小的日期。
- 遍历
- 输出结果:若存在有效日期则输出,否则输出。
复杂度分析
- 时间复杂度:,其中是不同日期的数量。
- 空间复杂度:,用于存储日期频率。
- 1
信息
- ID
- 1029
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 2
- 已通过
- 1
- 上传者