选课:小刘所在的学校本学期共开设了 60 门课,并且每位同学会选修 5 门不同的课,小刘想知道是否存在一个 3 门课的集合,使得小刘所在班级有至少 p% ( p 为不超过 100 的非负整数)...

题面描述

小刘所在的学校本学期共开设了 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')

猜你喜欢

转载自blog.csdn.net/tianxiefenxiang/article/details/107620513