第十八届浙大城市学院程序设计竞赛J--K-clearing python

博客内容介绍了如何使用Python解决程序设计竞赛中的一道题目,该题目要求处理数组,若有值等于K,则所有数递减,直到无值等于K。博主提供了通过的代码,并探讨了超时问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

J
在这里插入图片描述
题意: 给的一串数组内,有和K相同的值则所有数减一,形成的列表若还有等于K的数,再全减一,直到没有为止,输出。(最小减到 0)

在这里插入图片描述

思路: 统计从K开始的连续加一的数,每种有几个,比如例1有5个,例2只有1个。

a,k = map(int,input().split())
lst = list(map(int,input().split()))

n = 0
l = []
for item in lst:
    l.append(item)
# print(l)
l = list(set(l))#除重复
l.sort()
# print(l)

c = 0
while c < len(l):
    if l[c] == k:
        n += 1#减的数值
        k = k + 1
    c += 1

for i in range(0, len(lst)):
    if lst[i] <= n:
        lst[i] = 0
    else:
        lst[i] = lst[i] - n

print(*lst)

这个是过的代码,下面那个 思路是欧克的,但是超时了,主要我想不通为什么超时。。。

n,k=map(int,input().split())
an=list(map(int,input().split()))
if k not in an:
    print(*an)
else:
    re=1
    for i in range(n):
        k+=1
        if k in an:
            re+=1
        else:
            break
    res=[]
    for j in an:
        c=j-re
        if c<0:
            res.append(0)
        else:
            res.append(c)
    print(*res)

可能是循环 太久了趴

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值