当前位置:   article > 正文

2024.6.11刷题记录

2024.6.11刷题记录

目录

一、795. 前缀和 - AcWing题库

二、796. 子矩阵的和 - AcWing题库

三、797. 差分 - AcWing题库

四、798. 差分矩阵 - AcWing题库

五、799. 最长连续不重复子序列 - AcWing题库

六、800. 数组元素的目标和 - AcWing题库

七、2816. 判断子序列 - AcWing题库


一、795. 前缀和 - AcWing题库

  1. n, m = map(int, input().split())
  2. nums = [0] + list(map(int, input().split())) # 在前面加一个元素,防止询问时越界
  3. # 前缀和
  4. for i in range(1, n + 1):
  5. nums[i] += nums[i - 1]
  6. # 询问
  7. for _ in range(m):
  8. l, r = map(int, input().split())
  9. print(nums[r] - nums[l - 1])

二、796. 子矩阵的和 - AcWing题库

  1. n, m, q = map(int, input().split())
  2. mat = []
  3. # 存入矩阵
  4. for _ in range(n):
  5. mat.append(list(map(int, input().split())))
  6. # 前缀和
  7. add = [[0] * (m + 1) for _ in range(n + 1)]
  8. for i in range(n):
  9. for j in range(m):
  10. add[i + 1][j + 1] = add[i][j + 1] + add[i + 1][j] - add[i][j] + mat[i][j]
  11. # 询问
  12. for _ in range(q):
  13. x1, y1, x2, y2 = map(int, input().split())
  14. print(add[x2][y2] - add[x1 - 1][y2] - add[x2][y1 - 1] + add[x1 - 1][y1 - 1])

三、797. 差分 - AcWing题库

  1. n, m = map(int, input().split())
  2. nums = list(map(int, input().split()))
  3. # 操作
  4. diff = [0] * (n + 1) # 差分数组
  5. for _ in range(m):
  6. l, r, c = map(int, input().split())
  7. diff[l - 1] += c
  8. diff[r] -= c
  9. # 前缀和
  10. print(diff[0] + nums[0], end = ' ')
  11. for i in range(1, n):
  12. diff[i] += diff[i - 1]
  13. print(diff[i] + nums[i], end = ' ')

四、798. 差分矩阵 - AcWing题库

  1. n, m, q = map(int, input().split())
  2. # 输入
  3. mat = []
  4. for _ in range(n):
  5. mat.append(list(map(int, input().split())))
  6. # 操作
  7. diff = [[0] * (m + 2) for _ in range(n + 2)]
  8. for _ in range(q):
  9. x1, y1, x2, y2, c = map(int, input().split())
  10. diff[x1][y1] += c
  11. diff[x1][y2 + 1] -= c
  12. diff[x2 + 1][y1] -= c
  13. diff[x2 + 1][y2 + 1] += c
  14. # 前缀和
  15. for i in range(1, n + 1):
  16. for j in range(1, m + 1):
  17. diff[i][j] += diff[i - 1][j] + diff[i][j - 1] - diff[i - 1][j - 1]
  18. print(diff[i][j] + mat[i - 1][j - 1], end = ' ')
  19. print()

五、799. 最长连续不重复子序列 - AcWing题库

  1. # 滑动窗口
  2. import collections
  3. n = int(input())
  4. nums = list(map(int, input().split()))
  5. # hash = collections.defaultdict(int) # 储存区间中元素个数
  6. hash = dict.fromkeys(nums, 0)
  7. left, ans = 0, 0
  8. for right in range(n):
  9. # 遍历右端点
  10. hash[nums[right]] += 1
  11. # 缩短区间,将左端点以到区间内无重复数字
  12. while hash[nums[right]] > 1:
  13. hash[nums[left]] -= 1
  14. left += 1
  15. ans = max(ans, right - left + 1) # 更新答案
  16. print(ans)

六、800. 数组元素的目标和 - AcWing题库

  1. # 双指针
  2. n, m, target = map(int, input().split())
  3. alist = list(map(int, input().split()))
  4. blist = list(map(int, input().split()))
  5. i, j = 0, m - 1
  6. while i < n and j >= 0:
  7. x, y = alist[i], blist[j]
  8. if x + y == target:
  9. print(i, j)
  10. break
  11. elif x + y > target:
  12. j -= 1
  13. else:
  14. i += 1

七、2816. 判断子序列 - AcWing题库

  1. # 模拟
  2. n, m = map(int, input().split())
  3. short_list = list(map(int, input().split()))
  4. long_list = list(map(int, input().split()))
  5. i, j = 0, 0
  6. while i < n and j < m:
  7. if short_list[i] == long_list[j]:
  8. i += 1
  9. j += 1
  10. else:
  11. j += 1
  12. print('Yes' if i == n else 'No')

感谢你看到这里!一起加油吧!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/728873
推荐阅读
相关标签
  

闽ICP备14008679号