fork download
  1. def subarr_size(n, k, arr):
  2. mp = {0:-1}
  3. mp2 = {0:-1}
  4. psum = 0
  5. maxLength = 0
  6. minLength = float('inf')
  7.  
  8. for i in range(n):
  9. psum += arr[i]
  10.  
  11. if (psum-k) in mp:
  12. maxLength = max(maxLength, i - mp[psum-k])
  13. if (psum-k) in mp2:
  14. minLength = min(minLength, i-mp2[psum-k])
  15. if psum not in mp:
  16. mp[psum] = i
  17. mp2[psum] = i
  18. if minLength == float("inf"):
  19. minLength = 0
  20.  
  21. return maxLength, minLength
  22.  
  23. def count_subarray(n, k, arr, target):
  24. if target==0:
  25. return 0
  26. count = 0
  27. window = sum(arr[:target])
  28. if window==k:
  29. count+=1
  30.  
  31. for i in range(target, n):
  32. window+=arr[i]-arr[i-target]
  33. if window == k:
  34. count+=1
  35.  
  36. return count
  37.  
  38. n = int(input())
  39. k = int(input())
  40. arr = [int(input()) for _ in range(n)]
  41.  
  42. maxLength, minLength = subarr_size(n, k, arr)
  43. maxCount = count_subarray(n, k, arr, maxLength)
  44. minCount = count_subarray(n, k, arr, minLength)
  45.  
  46. print("Max Length:", maxLength, "Count:", maxCount)
  47. print("Min Length:", minLength, "Count:", minCount)
  48.  
  49.  
Success #stdin #stdout 0.08s 14052KB
stdin
6
6
1
2
3
1
1
1
stdout
Max Length: 4 Count: 1
Min Length: 3 Count: 2