思路: 根据题目描述,阿福一共有n天进行炒股,每天赚了ai元(负数表示亏钱)。阿福的老婆得到了m条信息,表示第l天到第r天总共通过炒股赚了x元。

要判断这些信息是否自相矛盾,可以使用一个数组diff来记录每一天与前一天的差值,即diff[i] = a[i] - a[i-1]。然后根据每条信息的l, r, x更新diff数组。

遍历m条信息,对于每条信息,更新diff数组的l-1位置和r位置,使得diff[l-1]到diff[r]的和为x。具体过程如下:

  1. 初始化diff数组,将diff[i]初始化为a[i] - a[i-1]。
  2. 遍历m条信息,对于每条信息(l, r, x),更新diff数组的l-1位置和r位置,使得diff[l-1]到diff[r]的和为x。
    • diff[l-1] += x
    • diff[r] -= x
  3. 遍历diff数组,计算累加和s,如果s小于0或者s大于0且diff[i] != 0,则返回false,表示信息矛盾。
  4. 如果遍历结束后没有返回false,则返回true,表示信息不矛盾。

代码如下:

T = int(input())

for _ in range(T):
    n, m = map(int, input().split())
    a = list(map(int, input().split()))
    
    diff = [0] * n
    for i in range(1, n):
        diff[i] = a[i] - a[i-1]
    
    is_consistent = True
    for _ in range(m):
        l, r, x = map(int, input().split())
        diff[l-1] += x
        diff[r] -= x
    
    s = 0
    for i in range(n):
        s += diff[i]
        if s < 0 or (s > 0 and diff[i] != 0):
            is_consistent = False
            break
    
    print(is_consistent)

时间复杂度分析: 遍历m条信息的过程时间复杂度为O(m),遍历diff数组的过程时间复杂度为O(n),因此总的时间复杂度为O(m+n)

题目描述阿福最近沉迷炒股然而作为韭菜阿福总是每天在赚钱和亏钱之间挣扎。一共有n天每天阿福可以视为通过炒股赚了ai元。ai经常是负的表示阿福炒股在这一天亏钱了。阿福的老婆阿翠不希望阿福花太多钱在炒股上于是旁敲侧击地询问阿福炒股的盈亏得到了m条这样的信息:阿福炒股的第l天到第r天总共通过炒股赚了x元x可以是负的。然而阿翠还是满腹疑虑担心阿福为了哄她说假话。她想判断一下阿福告诉他的这些信息是否自相矛盾。

原文地址: https://www.cveoy.top/t/topic/h95M 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录