4 条题解

  • 0
    @ 2026-3-9 14:32:53

    一道很标准的一维前缀和题,由于倒水是只能往下一个杯子里倒,并且没有容量上限,所以问题可以简化为求k长区间和的最大值问题,只需先预处理前缀和数组,并枚举所有可能的左边界l,利用前缀和数组找出和最大的值输出即可。复杂度O(n)。

    • 0
      @ 2026-3-9 14:22:55
      import sys
      input = lambda:sys.stdin.readline().strip()
      
      n=int(input())
      k=int(input())
      a=[0]+list(map(int,input().split()))
      s=[0]*len(a)
      
      for i in range(1,n+1):
          s[i]=s[i-1]+a[i]
      
      ans=0
      for l in range(1,n-k+1):
          r=l+k
          ans=max(ans,s[r]-s[l-1])
      print(ans)
      
      • 0
        @ 2026-3-8 15:58:36

        import sys data = sys.stdin.buffer.read().split() n = int(data[0]) k = int(data[1]) waters = list(map(int, data[2:2 + n])) len_waters = len(waters) pre_sum=[0]*(len_waters+1) for i in range(1,len_waters+1): pre_sum[i]=pre_sum[i-1]+waters[i-1] max_water=0 for p in range(1,len_waters+1): start=max(1,p-k) total = pre_sum[p] - pre_sum[start - 1] max_water = max(max_water, total) print(max_water)

        • 0
          @ 2026-3-8 15:57:45

          import sys data = sys.stdin.buffer.read().split() n = int(data[0]) k = int(data[1]) waters = list(map(int, data[2:2 + n])) window_sum=0 len_waters = len(waters) max_waters = 0 left=0 right=0 while right<len_waters: c=waters[right] window_sum+=c right+=1 while right-left>k+1: window_sum-=waters[left] left+=1 max_waters=max(max_waters,window_sum) print(max_waters)

          • 1

          信息

          ID
          160
          时间
          1000ms
          内存
          256MiB
          难度
          2
          标签
          递交数
          214
          已通过
          78
          上传者