当前位置:网站首页>cf:D. Insert a Progression【关于数组中的插入 + 绝对值的性质 + 贪心一头一尾最值】

cf:D. Insert a Progression【关于数组中的插入 + 绝对值的性质 + 贪心一头一尾最值】

2022-07-06 00:37:00 白速龙王的回眸

在这里插入图片描述

分析

解释请看注释
考虑1和x
三个情况即可

ac code

import sys
input = sys.stdin.readline

# we want to insert x into a1 ... an
# if x belongs to [a1, an]
# there must be a period s.t. ai <= x <= aj
# which means the extra effect of x disappear
# therefore we only need to consider 1 and x
# others can insert between 1 and x, just vaporate

# if min <= 1 and x <= max nothing happen
# otherwise, we consider 1 < min
# three cases: abs(1 - a.front()), abs(1 - a.back()), abs(1 - min) * 2
# e.g. minn 1 ai, 1 give extra 2 * (minn - 1)

for _ in range(int(input())):
    n, x = list(map(int, input().split()))
    a = list(map(int, input().split()))
    ans = 0
    for i in range(1, n):
        ans += abs(a[i] - a[i - 1])

    # for 1 <= min
    p = min(abs(1 - a[0]), abs(1 - a[-1]), 2 * abs(1 - min(a)))
    # for x
    q = 0
    if x > max(a):
        q = min(abs(x - a[0]), abs(x - a[-1]), 2 * abs(x - max(a)))
    ans += p + q
    print(ans)

总结

绝对值的性质有点意思

原网站

版权声明
本文为[白速龙王的回眸]所创,转载请带上原文链接,感谢
https://bridge-killer.blog.csdn.net/article/details/125629027