题面描述
小刘所在的学校本学期共开设了 60 门课,并且每位同学会选修 5 门不同的课,小刘想知道是否存在一个 3 门课的集合,使得小刘所在班级有至少 p% ( p 为不超过 100 的非负整数) 的同学选修了这三门课。
输入数据
第一行有一个整数 t (1 ≤ t ≤ 20) ,表示有 t 组数据。对于每组数据:
第一行有两个整数 n, p (2 ≤ n ≤ 100000,50 ≤ p ≤ 100) , n 表示小明班级的人数;
接下来的 n 行,每行有 5 个整数 ai (0 ≤ ai ≤ 59) 表示该同学选修的课程号。
输出数据
对于每组数据,如果存在至少 p% 的同学选修相同的 3 门课程,输出一行“ yes ”,否则输出“ no ”。
样例输入
1
5 80
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
样例输出
yes
心得:这道题我感觉比较复杂,参考了其他编译通过的同学,但是貌似有问题。如
6 50
1 4 6 7 8
1 4 5 9 10
1 3 5 11 12
1 3 5 13 14
2 3 5 15 16
2 3 6 17 17
此时按程序至少3人选择了 {1,3,5},会返回 “yes”,但是肉眼很容易看出,此时不存在3人选择了 {1,3,5},应该返回 “no”
# 拷贝得分题
T = int(input())
for t in range(T):
classN = {
}
n,p = list(map(int,input().split()))
limit = n*p/100
for i in range(n):
temp = [int(item) for item in input().split()]
for temp1 in temp:
if temp1 in classN:
classN[temp1] += 1
else:
classN[temp1] = 1
result=sorted(classN.items(),key=lambda x:-x[1]) # 按值正序排序
if limit >= result[2][1]:
print('no')
else:
print('yes')