You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Codeforces 158A Next Round题解lambda函数及最后一行逻辑详解

Codeforces 158A 题极简Python代码逐解

前置背景(158A题意核心)

参赛选手得分按非递增顺序给出,晋级要求同时满足两个条件:

  • 得分严格大于0
  • 得分不低于第k名选手的得分
    求最终晋级总人数。

代码逐行解释

i=lambda:map(int,input().split())
  • 这里的lambda是Python中快速定义匿名小函数的语法,这段代码等价于写了一个普通函数:
    def i():
        return map(int, input().split())
    
  • 作用是把重复的输入逻辑封装,省得每次都要写map(int, input().split()),调用i()就能直接读取一行输入,按空格拆分后转成整数迭代器。

n,k=i()
  • 调用上面封装的输入函数,读取题目第一行输入的两个整数:n是总参赛人数,k是晋级参照的名次。

l=list(i())
  • 再次调用输入函数,读取题目第二行输入的n个整数,转成列表l,就是按非递增顺序排列的所有选手得分。

print(sum(v>=max(1,l[k-1])for v in l))

这行是核心逻辑,拆成三部分理解:

  1. 计算晋级阈值max(1,l[k-1])
    • Python列表索引从0开始,所以第k名的得分是l[k-1]
    • 用max(1, 第k名得分)是把两个晋级条件合并成一个阈值:如果第k名得分是0,阈值就变成1,刚好排除所有0分选手,完全符合题目要求。
  2. 生成器表达式v>=阈值 for v in l
    • 遍历所有选手得分v,逐个判断是否满足≥阈值,满足返回True,不满足返回False
    • Python中True等价于整数1,False等价于整数0
  3. sum()求和
    • 把所有判断结果的1和0加总,得到的总和就是满足晋级条件的总人数,直接打印即可。

示例验证

举个常见测试用例:
输入:

8 5
10 9 8 7 7 7 3 0
  • 第k=5名的得分是l[4]=7,阈值为max(1,7)=7
  • 遍历所有得分,≥7的共有6个,最终输出6,和预期结果一致。

内容的提问来源于stack exchange,提问作者astron

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 04:48:04