#5226. 2025南海小学区赛题解

2025南海小学区赛题解

当前没有测试数据。

题目1:气温统计

分析

遍历气温数组,维护三个变量:最高气温、最低气温、第一次出现最高气温的天数。初始化时将第一个气温作为初始最高和最低,天数记为1。后续逐个比较,更新最高/最低值,若遇到更高气温则更新天数。

注意点

  • 温度可能为负数,初始化需用第一个元素而非0。
  • 仅在第一次遇到更高气温时更新天数,后续相同最高温不更新。

题目2:最长连续打卡

分析

遍历打卡数组,维护两个变量:current(当前连续打卡天数)和max_len(最长连续天数)。遇到1时current加1并更新max_len;遇到0时重置current为0。

注意点

  • 边界情况:全1数组(需正确返回N)、N=1(返回1或0)。
  • 每次更新current后都要尝试更新max_len,避免遗漏。

题目3:机器人走路

分析

直接模拟机器人移动,维护坐标(r, c)(初始为(1,1))。遍历指令字符串:

  • U:若r>1r--
  • D:若r<Rr++
  • L:忽略;
  • R:执行两次向右,每次若c<Cc++

注意点

  • 地图尺寸R,C可达1e9,无需创建数组,仅维护坐标即可。
  • R指令需分两次判断越界(如第一次到边界后第二次不动)。

题目4:网格涂黑

分析

用两个布尔数组row_visitedcol_visited分别记录被涂黑的行被涂黑的列(去重)。初始化两个数组全为false,遍历每次操作,将对应的行和列标记为true。最后统计rows(被涂黑行数)和cols(被涂黑列数),则白色格子数为:

(Hrows)×(Wcols)(H - rows) \times (W - cols)

(仅当行和列都未被涂黑时,格子为白色)

注意点

  • 必须对行和列去重(多次涂同一行/列仅算一次)。
  • 数据范围1e5,数组大小需开到1e5+10,注意内存分配。

题目5:最长平衡子串(暴力部分分)

分析

首先将字符串转化为数字数组:把字符 'A' 看作 1,把字符 'B' 看作 -1。此时,“平衡子串”等价于子串的数字和为 0(因为 AB 数量相等时,+1 和 -1 会相互抵消)。

为了快速计算区间和,我们引入前缀和数组。设 pre_sum[i] 表示前 i 个数字的和(规定 pre_sum[0] = 0),那么区间 [j+1, i] 的和就等于 pre_sum[i] - pre_sum[j]。我们的目标是找到满足 pre_sum[i] == pre_sum[j] 的最大 i - j

暴力解法:先计算出前缀和数组,然后用双重循环枚举所有区间(即枚举所有的 ij,其中 i > j),只要发现 pre_sum[i] == pre_sum[j],就计算长度 i - j 并更新最大值。

注意点

  • 时间复杂度O(n²),对于n=2000的数据可以通过,但n=2e5时会超时。
  • 前缀和数组的大小要开成 n+1,注意下标从0开始。

题目6:团队战斗力最大(暴力部分分)

分析

枚举所有可能的学生对(i, j)(i < j),计算每对的战斗力min(Pi+Pj,Mi+Mj)\min(P_i+P_j, M_i+M_j),记录最大值。

注意点

  • 时间复杂度O(n²),对于n=1e4的数据可以通过,但n=1e5时会超时。
  • 注意i和j不能是同一个学生,且每对只计算一次(i < j)。