当前位置: 首页 > article >正文

蓝桥杯刷题DAY2:二维前缀和 一维前缀和 差分数组

闪耀的灯光


📌 题目描述

蓝桥公园是一个适合夜间散步的好地方,公园可以被视为由 n × m 个矩形区域构成。每个区域都有一盏灯,初始亮度为 a[i][j]

小蓝可以选择一个大的矩形区域,并按下开关一次,这将使得该区域内每盏灯的亮度减少 1,但每个区域内的灯的亮度最多只能减少至 a[i][j] - c。如果此时亮度已达到 a[i][j] - c,再次按下开关将使得灯的亮度恢复为 a[i][j]

现在,小蓝将进行 t 次操作。每次操作他会选择一个矩形区域,该区域的左上角端点为 (x₁, y₁),右下角端点为 (x₂, y₂),然后将该区域内所有灯按下 k 次开关。

他想知道,在每次操作结束后,该区域内所有灯的总亮度是多少?在下一次操作前,公园内所有灯光会恢复到初始值

数据保证每盏灯的亮度不会减少至负数。


📌 输入格式

  • 第一行 输入三个正整数 nmc,含义如上所述。
  • 接下来 n,每行输入 m 个正整数,代表灯的初始亮度 a[i][j]
  • n+2 输入一个正整数 t,表示小蓝的操作次数。
  • 接下来 t,每行输入 5 个整数 x₁, y₁, x₂, y₂, k
    • (x₁, y₁):矩形区域的左上角坐标。
    • (x₂, y₂):矩形区域的右下角坐标。
    • k:该区域内所有灯按下的开关次数。

📌 输出格式

输出 t 行,每行一个正整数,表示每次操作结束后该区域内所有灯的总亮度。


📌 样例输入

3 3 3 14 14 17 13 15 18 13 16 19 3 1 1 2 2 3 2 2 3 3 5 2 3 3 3 4


📌 样例输出

44 64 37


📌 样例解释

🔹 第一次操作 (1,1) → (2,2), k=3

初始状态

14 14 17 13 15 18 13 16 19

按 3 次开关后

11 11 17 10 12 18 13 16 19

答案

11 + 11 + 10 + 12 = 44


🔹 第二次操作 (2,2) → (3,3), k=5

初始状态

14 14 17 13 15 18 13 16 19

按 5 次开关后

14 14 17 13 14 17 13 15 18

答案

14 + 17 + 15 + 18 = 64


🔹 第三次操作 (2,3) → (3,3), k=4

初始状态

14 14 17 13 15 18 13 16 19

按 4 次开关后

14 14 17 13 15 18 13 16 19

答案

18 + 19 = 37


📌 评测数据规模

约束条件范围
矩阵大小1 ≤ n, m ≤ 300
最大减少值1 ≤ c ≤ 10
操作次数1 ≤ t ≤ 10⁵
灯的初始亮度10 ≤ a[i][j] ≤ 10⁹
开关次数1 ≤ k ≤ 10⁹
查询范围1 ≤ x₁ ≤ x₂ ≤ n, 1 ≤ y₁ ≤ y₂ ≤ m

📌 运行限制

语言最大运行时间最大运行内存
C++1s256M
C1s256M
Java2s256M
Python33s256M

子串简写

题目描述

程序猿圈子里正在流行一种很新的简写方法:对于一个字符串,只保留首尾字符,将首尾字符之间的所有字符用这部分的长度代替。例如 internationalization 简写成 i18nKubernetes(注意连字符不是字符串的一部分)简写成 K8sLanqiao 简写成 L5o 等。

在本题中,我们规定长度 大于等于 K 的字符串都可以采用这种简写方法(长度小于 K 的字符串不配使用这种简写)。

给定一个字符串 S 和两个字符 c1c2,请你计算 S有多少个以 c1 开头,c2 结尾的子串 可以采用这种简写?


输入格式

  • 第一行包含一个整数 K
  • 第二行包含一个字符串 S 和两个字符 c1c2

输出格式

  • 一个整数代表答案。

样例输入

4

abababdb a b

样例输出

6


样例说明

符合条件的子串如下所示,中括号内是该子串:


评测用例规模与约定

  • 对于 20% 的数据,保证:2 ≤ K ≤ |S| ≤ 10,000 
  • 对于 100% 的数据,保证:2 ≤ K ≤ |S| ≤ 500,000
  • S 仅包含小写字母。
  • c1c2 均为小写字母。
  • |S| 代表字符串 S 的长度。

运行限制

语言最大运行时间最大运行内存
C++1s256M
C1s256M
Java2s256M
Python33s256M

题解: 

import os
import sys

# 请在此输入您的代码

if __name__=="__main__":
  K=int(input())
  S,c1,c2=input().split()
  n=len(S)
  myarray=[0]*n
  if S[0]==c2:
    myarray[0]=1
  for i in range(1,n):
    if S[i]==c2:
      myarray[i]=myarray[i-1]+1
    else:
      myarray[i]=myarray[i-1]
  total=0
  for i in range(n):
    
    if S[i]==c1:
      l=i+K-1
      if l<n:
        total+=myarray[n-1]-myarray[i+K-2]
  print(total)

重新排序

问题描述

给定一个数组 A 和一些查询 [Li,Ri],求数组中第 Li 至第 Ri​ 个元素之和。

小蓝觉得这个问题很无聊,于是他想重新排列一下数组,使得最终每个查询结果的和尽可能地大。小蓝想知道相比原数组,所有查询结果的总和最多可以增加多少?


输入格式

  • 第一行:包含一个整数 n(表示数组 A 的大小)。
  • 第二行:包含 n 个整数 A1,A2,…,An​(相邻两个整数之间用空格分隔)。
  • 第三行:包含一个整数 m(表示查询的数目)。
  • 接下来的 m 行
    • 每行包含两个整数 Li,Ri​。

输出格式

输出一行,包含一个整数,表示所有查询结果的总和相比原数组最多可以增加的值。


样例输入

5 1 2 3 4 5 2 1 3 2 5

样例输出

4

样例说明

原数组查询总和:

  • 查询 [1,3]:1+2+3=6
  • 查询 [2,5]:2+3+4+5=14
  • 原总和:6+14=20

重新排列后数组为 (1,4,5,2,3),查询和变为:

  • 查询 [1,3]:1+4+5=10
  • 查询 [2,5]:4+5+2+3=14
  • 新总和:10+14=24

最大增加值:24−20=4。


评测用例规模与约定

评测用例限制范围
30% 的评测用例n,m≤50
50% 的评测用例n,m≤500
70% 的评测用例n,m≤5000
100% 的评测用例1≤n,m≤10^5,1≤Ai≤10^6,1≤Li≤Ri≤10^6

运行限制

编程语言最大运行时间最大运行内存
C++1s512M
C1s512M
Python31s512M
Java1s512M

http://www.kler.cn/a/528330.html

相关文章:

  • HarmonyOS NEXT:保存应用数据
  • C++ Primer 自定义数据结构
  • Kafka中文文档
  • 对顾客行为的数据分析:融入2+1链动模式、AI智能名片与S2B2C商城小程序的新视角
  • 【项目集成Husky】
  • 【搞定offer】远程医疗:健康科技领域,搞定医疗offer
  • leetcode 2563. 统计公平数对的数目
  • x86-64数据传输指令
  • 【Pytorch和Keras】使用transformer库进行图像分类
  • Python-基于PyQt5,pdf2docx,pathlib的PDF转Word工具
  • 海外问卷调查,最常用到的渠道查有什么特殊之处
  • XML DOM - 导航节点
  • CSDN图片加载不出来问题解决
  • webrtc peerconnection_client peerconnection_server 连接失败问题解决 win10 win11
  • 使用UpdateCursor删除行
  • 学习ArkTS语言
  • 开源2 + 1链动模式AI智能名片S2B2C商城小程序视角下从产品经营到会员经营的转型探究
  • react中useEffect的使用
  • 【数据结构】_C语言实现带头双向循环链表
  • 安装anaconda3 后 电脑如何单独运行python,python还需要独立安装吗?
  • BurpSuite抓包与HTTP基础
  • MySQL数据库 (三)- 函数/约束/多表查询/事务
  • pytorch实现门控循环单元 (GRU)
  • 《深入理解HTTP交互与数据监控:完整流程与优化实践》
  • FreeRTOS学习 --- 中断管理
  • 写好简历的三个关键认知