L1-088 静静的推荐 (python)

天梯赛结束后,某企业的人力资源部希望组委会能推荐一批优秀的学生,这个整理推荐名单的任务就由静静姐负责。企业接受推荐的流程是这样的:

  • 只考虑得分不低于 175 分的学生;

  • 一共接受 K 批次的推荐名单;

  • 同一批推荐名单上的学生的成绩原则上应严格递增;

  • 如果有的学生天梯赛成绩虽然与前一个人相同,但其参加过 PAT 考试,且成绩达到了该企业的面试分数线,则也可以接受。

给定全体参赛学生的成绩和他们的 PAT 考试成绩,请你帮静静姐算一算,她最多能向企业推荐多少学生?

输入格式:

输入第一行给出 3 个正整数:N(≤105)为参赛学生人数,K(≤5×103)为企业接受的推荐批次,S(≤100)为该企业的 PAT 面试分数线。

随后 N 行,每行给出两个分数,依次为一位学生的天梯赛分数(最高分 290)和 PAT 分数(最高分 100)。

输出格式:

在一行中输出静静姐最多能向企业推荐的学生人数。

输入样例:

10 2 90
203 0
169 91
175 88
175 0
175 90
189 0
189 0
189 95
189 89
256 100

输出样例:

8

样例解释:

第一批可以选择 175、189、203、256 这四个分数的学生各一名,此外 175 分 PAT 分数达到 90 分的学生和 189 分 PAT 分数达到 95 分的学生可以额外进入名单。第二批就只剩下 175、189 两个分数的学生各一名可以进入名单了。最终一共 8 人进入推荐名单。

代码实现:

最开始我的思路是对于大于等于175分的人,分别按照两种情况讨论,一种是第一次天梯赛满足条件的,不再检查面试成绩,但相同成绩的只能取一个人,如果推荐了此人,就在所有人的总列表中去除此人;另一种是满足条件,但他的天梯赛成绩与之前推荐的相同,但如果此人的面试成绩满足要求,推荐此人。所以我写了如下代码:

a,b,c = map(int,input().split())
l = []
for i in range(a):
    m,n = map(int,input().split())
    l.append((m,n))
l.sort()
for i in range(b):
    m2={}
    mi = 175
    for m,n in l:
        if m>=175:
            if m not in m2:
                m2[m]=n
                mi = m
                l.remove((m,n))
            elif n>=c:
                l.remove((m,n))
print(a -len(l))

但结果为7,显然错误。然后我发现对于样例中的成绩(203,0)一直无法进入判断,没有报错,暂时也不知道原因,如有大神,还望指教一下,谢谢啦~

后面我参考了别人的代码,代码如下:

a1,a2,a3=[int(i) for i in input().split()]
t=tuple((input().split() for i in range(a1)))
 
r=0    #设置人数
d={}    #新建字典
for a,b in t:
    if int(a)>=175:
        if int(b)>=a3:
            r+=1
        else:
            if d.get(a,0)

代码简洁明了,不得不献上膝盖,在下佩服!!

你可能感兴趣的:(天梯赛,python)