用python来解PAT乙级1066图像过滤-15-满分无超时

题意大概就是给出m*n的像素组,将其中A-B范围内的换成一个指定的像素值,A,B和指定的像素值都在输入的第一行给到,并且输出全部为三位的像素值

在接收输入之后,直接开始for循环遍历,然后将A-B范围内的像素值换掉并且全部换成三位数值

刚开始我是建了个函数来把数值变成三位字符串,提交发现超时了,代码是这样的:

m , n , A , B , change = map(int,input().split())
def san(n):
    if len(str(n)) == 3:
        return str(n)
    else:
        s = str(n).rjust(3,'0')
        return s

res = []
for i in range(m):
    l = list(map(int,input().split()))
    for j in range(n):
        if A <= l[j] <= B:
            l[j] = san(change)
        else:
            l[j] = san(l[j])
    res.append(l)

for k in res:
    print(' '.join(k))

然后把函数去掉了,直接在替换的时候在前置位补上0,这样:

m , n , A , B , change = map(int,input().split())
change = '0'*(3-len(str(change))) + str(change)
res = []
for i in range(m):
    l = input().split()
    for j in range(n):
        if A <= int(l[j]) <= B:
            l[j] = change
        else:
            l[j] = '0'*(3-len(l[j])) + l[j]
    res.append(l)

for k in res:
    print(' '.join(k))

提交结果:

用python来解PAT乙级1066图像过滤-15-满分无超时

耗时还是有点长。。。