本场巅峰赛的所有题目的难度评级为:
题目编号 题目标题 难度 T1 deepseek 入门 T2 染色 普及- T3 竞赛 普及+/提高- T4 偶数Ⅰ 普及+/提高- T5 捉迷藏 普及+/提高 T6 偶数Ⅱ 普及+/提高
T1
A - deepseek
模拟,循环
首先,程序需要读入一个给定的字符串。在对该字符串进行遍历的过程中,当遇到字符 '|' 时,便开始输出 '|' 之后的那部分字符串内容。
时间复杂度 O(n)
T2
B - 染色
模拟,分支
首先对于本题,我们发现对于 n = 1 时,因为 BobBobBob 可以将唯一的位置进行设置, AliceAliceAlice 无法将全部的点变成黑色。
接下来我们考虑如果有一个无限的空间,你有 kkk 次染色的机会,最多会有多少位置会被染色。
根据题面,只有一个点的四联通的位置有至少两个黑色的点,这个点可以被被动染色。
我们设两个黑色点的坐标分别为 (x1,y1)(x_1, y_1)(x1 ,y1 ) (x2,y2)(x_2 , y_2)(x2 ,y2 ), 中间的点的坐标为 (x3,y3)(x_3,y_3)(x3 ,y3 ),那么很容易证明 min(x1,x2)≤x3≤max(x1,x2),min(y1,y2)≤y3≤max(y1,y2)min(x_1 ,x_2) \le x_3 \le max(x_1 , x_2),min(y_1 ,y_2) \le y_3 \le max(y_1 , y_2)min(x1 ,x2 )≤x3 ≤max(x1 ,x2 ),min(y1 ,y2 )≤y3 ≤max(y1
,y2 )。
因此我们设被染色的点的最大的横坐标为 xmaxx_{max}xmax ,最小的横坐标为 xminx_{min}xmin ,最大的纵坐标为 ymaxy_{max}ymax ,最小的纵坐标为 yminy_{min}ymin ,所有被染色点的坐标 (xi,yi)(x_i ,y_i)(xi ,yi ), 满足 xmin≤xi≤xmaxx_{min} \le x_i \le x_{max}xmin ≤xi ≤xmax , ymin≤yi≤ymaxy_{min} \le y_i \le y_{max}ymin ≤yi ≤ymax 。
因此最好的情况似乎是沿着一个对角线进行染色,这样可以染成一个 k×kk \times kk×k 的矩形。当 n>kn \gt kn>k 时,无法将所有的矩阵染成黑色。
还有另外一种证明,如果一个点被相邻的两个点给染色,这几个点所构成的周长不会增加,因此 kkk 次操作,最大染色后的图像,周长为 4×k4\times k4×k,最大组成一个边长为 kkk 的正方形。
对于剩下的情况判断经过 nnn 次染色,将整个矩阵染成黑色。可以分别按照奇偶性进行考虑,是可以构造的
时间复杂度 0(1)
T3
C-竞赛
我们设目前比分为 (a1,b1)(a_1, b_1)(a1 ,b1 ) , 下一次的比分为 (a2,b2)(a_2,b_2)(a2 ,b2 ) ,两个时间点之间可能平局的局数有多少。
首先我们思考一下,最早的平局的分数应该是多少? 应该是 (max(a1,a2),max(a1,a2))( \max(a_1 , a_2) ,\max(a_1,a_2))(max(a1 ,a2 ),max(a1 ,a2 )) ,同理,最后一次可以的平局可能是多少?应该是 (min(b1,b2),min(b1,b2))( \min(b_1 , b_2) ,\min(b_1,b_2))(min(b1 ,b2 ),min(b1 ,b2 )) 。这样我们只需要统计两个点之间的局数就可以了。
此外有一些特殊情况,比如连续三局的分数为 (0,0)(0,0)(0,0) ,(1,1)(1,1)(1,1) ,(2,2)(2,2)(2,2) ,现在有多少种可能的平局?
针对上述两种情况处理完成,便可以完成本次的题目。
T4
D - 偶数Ⅰ
数学,枚举
首先,观察方程 f(a,b,c)=∣ac−bc∣f(a,b,c)=\left | a^c - b^c \right |f(a,b,c)=∣ac−bc∣ 。通过对该式子进行因式分解(例如,当 ccc 为正奇数时,根据公式 xc−yc=(x−y)(xc−1+xc−2y+⋯+xyc−2+yc−1)x^c - y^c = (x - y)(x^{c - 1} + x^{c - 2}y + \cdots + xy^{c - 2} + y^{c - 1})xc−yc=(x−y)(xc−1+xc−2y+⋯+xyc−2+yc−1) ),我们不难发现,在研究该方程的某些性质时,ccc
的具体取值并不会对问题的本质产生实质性的影响。也就是说,在当前的问题背景下,ccc 这一变量是冗余的。因为 a−ba - ba−b 是偶数 ,后面的表达式是奇数。那么最终表达式的结果的末尾的二进制零的个数其实等于 a−ba-ba−b 的末尾的二进制数零的个数。
基于上述分析,我们可以将原问题进行转化,即通过枚举变量 aaa 和 bbb 的取值,来计算式子 ∣a−b∣\left | a - b \right |∣a−b∣ 的贡献值。
对于这个方法,在线是比较困难的,我们考虑离线先计算完每一个的结果。然后对每一次询问之间查表。
时间复杂度 O(n2n^2n2)
T5
E-捉迷藏
模拟
本题聚焦于地图变换与连通块划分问题,目标是判断能否借助特定的行、列交换操作,将给定地图分割为两个或更多的连通块。
1. 存在行列均含障碍物的点的情形:若地图中存在某个点,其所在行与列均包含障碍物,处理过程相对简单。可以先将需要分隔的物品移动至地图的四个角落, 随后利用这些障碍物将物品包围起来,以此实现地图的分隔。
2. 不存在行列均含障碍物的点的情形:当不存在满足上述条件的点时,经推导可知,所有障碍点能够通过一定的移动,组合形成一个矩形。 在此情况下,核心任务转变为判断能否借助这个矩形,将地图中的空白点分割成两个或更多的连通块。
可以证明对于 1 情况,最多移动 4 次,对于 2 情况,最多移动 2 次。
T6
F-偶数Ⅱ
我们定义 f[j]f[j]f[j] 为对于所有 i∈{1∼j−1}i \in \{1 \sim j - 1\}i∈{1∼j−1} ,第 jjj 个奇数与第 iii 个奇数组合后所产生的贡献值。例如,f[2]=1f[2] = 1f[2]=1,这是因为第一个奇数是 111,第二个奇数是 333,两数相减为 222,222 会产生一点贡献。依此类推。
方法一
接着,我们思考表达式 ∣a−b∣\left | a - b \right |∣a−b∣
的本质,它实际上是在求数轴上两点之间的距离。那么,最终结果所产生的贡献值是否可以转化为到 jjj 点距离为 222
的点的数量加上到 jjj 点距离为 444 的点的数量,以此类推。
由此,我们推测 f[j+1]f[j + 1]f[j+1] 可以转化为 j+⌊j2⌋+⌊j4⌋+⋯j + \lfloor\frac{j}{2} \rfloor + \lfloor\frac{j}{4} \rfloor + \cdotsj+⌊2j ⌋+⌊4j ⌋+⋯
进而得到 f[j+1]−f[⌊j2+1⌋]=jf[j + 1] - f[\lfloor \frac{j}{2} + 1 \rfloor] = jf[j+1]−f[⌊2j +1⌋]=j
基于此,我们可以通过线性动态规划来计算每一个 f[j]f[j]f[j]。
方法二
我们思考,表达式 $\left | a - b \right | =\left | a + 2 - b + 2 \right | $
那么对于每一个 f[j−1]f[j - 1 ]f[j−1] 向 f[j]f[j]f[j] 递推的时候。其实可以递推为 f[j]=f[j−1]+log(2∗j)f[j]=f[j-1] + \log(2 *j)f[j]=f[j−1]+log(2∗j).
然后,结合前缀和以及相应的逆元操作,即可解决本题。
时间复杂度O(n+qn+ qn+q )