思维(Python)

小红的平滑值插值

https://www.nowcoder.com/practice/97f6b71b1df745cd9926eb861e2d89df

思路:整体思路比较容易想到:当两数间的差值时,用公差为的等差数列去从小到大的插入,结果就是,然后不断累加即可。但是有个特判不好注意到,整体思路可以处理差值中有k的情况,此时会正确输出0;但当所有差值都< k时,此时应该输出1,因为我们要额外构造一个数,使得差值为k。所以说再额外引入一个flag数组,作为特判的标记

代码:

import sys
input = lambda: sys.stdin.readline().strip()

import math
inf = 10 ** 18

def I():
    return input()

def II():
    return int(input())

def MII():
    return map(int, input().split())

def GMI():
    return map(lambda x: int(x) - 1, input().split())

def LI():
    return input().split()

def LII():
    return list(map(int, input().split()))

def LFI():
    return list(map(float, input().split()))

fmax = lambda x, y: x if x > y else y
fmin = lambda x, y: x if x < y else y
isqrt = lambda x: int(math.sqrt(x))

'''

'''

def solve():
    n, k = MII()
    a = LII()

    cnt = 0
    flag = [False, False]
    for i in range(1, n):
        if abs(a[i] - a[i - 1]) > k:
            cnt += (abs(a[i] - a[i - 1]) - 1) // k
            flag[0] = True
        if abs(a[i] - a[i - 1]) == k:
            flag[1] = True

    if flag[0]:
        print(cnt)
    elif flag[1]:
        print(0)
    else:
        print(1)

t = 1
# t = II()
for _ in range(t):
    solve()
#每日一题挑战#
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务