2026 · 10 做题记录 (每日更新总结)

2026 · 10 做题记录 (每日更新)

1005

tag : 反悔贪心

  • 二分转判定

  • 枚举分界线

  • 扫描线

  • 反悔贪心 prei + sufi >= k

  • CF 1367D

tag : 构造 性质 调整法

  • \(bi = 0\) 一定是最大字符

  • 每次更新 \(b\) 数组

  • CF 1906B

tag : 构造 性质 前缀异或和 模型转化

  • 看到操作想到差分,进而想到前缀异或和

  • 通过模拟,发现性质,得到转化

  • 即,将原问题转化为比较两个串前缀异或和中 1 的个数

  • CF 1519E

tag : 构造 建图优化 点边对偶

  • 从 \(O(n^2)\) 连点建图通过点边对偶 转化成:将每个斜率作为节点建图 \(=>\) \(O(n)\)

  • 每次操作即被转化成对每个点的相邻两条边操作,即 :无向图的邻边匹配问题

  • 然后通过对树边和非树边的讨论,分别对每个连通块求解,得到构造

  • CF 977E

tag : 图论 连通块 度数 细节警示

  • 细节注意:\(dfs\) 遍历连通块时不能中途 \(return\),否则会漏掉未访问的顶点

1006

  • 留下峰值

  • 细节注意:更新右端点时忘记更新最大值 (导致模拟赛 T1 挂分 100 -> 40)


1008

  • 上午

  • ARC111A Simple Math 2

  • 没有想到把模数提进来:

  • \(\left\lfloor \frac{10^N \bmod M^2}{M} \right\rfloor\)

  • ARC111B Reversible Cards

  • 建图正确,但是没有分别讨论环和树

  • ARC111C Too Heavy

  • ARC111D Orientation

  • 若 \(u \to v\),则 \(R(v) \subseteq R(u)\),故 \(c_u \ge c_v\)。因此 \(c_u > c_v\) 定向 \(u \to v\),\(c_u < c_v\) 定向 \(v \to u\)。

  • 若 \(c_u = c_v\),则必须 \(R(u)=R(v)\),即 \(u,v\) 强连通。相同 \(c\) 的连通块必须定向为强连通图。

  • 题目保证有解 \(\Rightarrow\) 这些连通块无桥。DFS 定向:树边父 \(\to\) 子,非树边子孙 \(\to\) 祖先,即强连通。

  • 实现:不同 \(c\) 直接定向;相同 \(c\) 的边 DFS,未访问则 \(u \to v\) 并递归,已访问则 \(u \to v\)(\(v\) 是祖先)。

  • 晚上

  • 感觉时间不太够,只写完前 5 个题;

  • 赛后发现 T6 是个状压 DP,比较简单;

  • T7 Range Queries and Copies_CSES - 1737 学长说要用主席树 ,不太会,写了一个离线建版本树 + DFS + 回滚数据结构 AC了


1009

  • CF1473E Minimum Path

  • 模型转化:把原式拆成正常边权和后,转化为在分层图上恰好选一条边免费、一条边双倍的最短路。

  • 多个状态转移

  • CF1922F Replace on Segment

  • 误以为"区间不含颜色 c"可以用"区间全变成某个 d ≠ c"替代,漏掉了"部分刷色、整体不含"这一中间状态

  • 正确的状态是同时维护 \(flrc\)(区间全变成 \(c\))和 \(glrc\)(区间不含 \(c\))两个状态

  • CF1521D Nastia Plays with a Tree

  • 每个节点(含非根)都最多保留 2 条能向上连接的子边,保留满 2 条则返回不能连父边,否则返回能连父边,其余边删除。

  • P14362 CSP-S 2025 道路修复

  • 我只写了一个 \(O(mlogm+2k⋅knlog(kn))\) 的暴力 MST,80 分 还没有优化

  • CF126B Password

  • 较为简单的一道字符串题,并复习了KMP 算法

  • CF1320D Reachable Strings

  • 通过模拟发现 0 的奇偶性不变,然后奇偶编码

  • 注意这道题会卡单哈希


1010

今天自己做CSP-S 2026 提高级模拟赛 Day3, 赛时得分 :40 + 50 + 15 + 40 = 145

  • T1 砍苹果树

  • 赛时复盘 :没有想到先枚举树边,再用树上差分

  • 删掉一条树边后,统计有多少条非树边跨越了它(用树上差分求路径覆盖数)

  • 若覆盖数为 0 则方案数加 m(随便删一条非树边)

  • 为 1 则加 1(必须删这条唯一跨越的非树边)

  • 大于 1 则不加。

  • T2 能量收集

  • 赛时只写了暴力的期望DP,知道要用矩阵加速,但是没有推出矩阵 T


1011

上午返校上常规(竞赛放假)


下午竞赛,具体如下


1012

上午竞赛,打 ARC125,A掉 A,B题,rank = 2 赛后改过C,D


下午回班学常规,刚好数理化三科


晚上学竞赛,继续做昨晚计数题单:10月3日上午专题2 (计数专题)

  • CF938E Max History

  • 元素 \(x\) 会被计入答案,当且仅当:

  • \(x\) 不是全局最大值;

  • 在所有值 \(≥x\) 的元素中,\(x\) 是第一个出现的。

  • 贡献的计算很巧妙,利用了概率,避免了组合数公式的复杂化简,具体如下:

  • 计算贡献

设数组长度为 \(n\),总排列数为 \(n!\)。

对于某个值 \(v\),设:


1013

上午打模拟赛 模拟赛 - 20261013, rank = 4,T1记忆化搜索写错了???
赛时得分:67 + 100 + 68 + 8 + 9 = 252


下午学习文化课


晚上改题(上午模拟赛)

tag : 数学推导 滑动窗口

  • 定义

\(A_i \text{ 表示骑士 } i \text{ 的发言时长}\)

\(B_i \text{ 表示骑士 } i \text{ 的到达时间}\)

\(End_i \text{ 表示骑士 } i \text{ 发言结束的时刻}\)

  • 递推式

\(End_i = \max(End_{i-1}, B_i) + A_i\)

  • 推导展开

\(End_i = \max(0, B_i) + A_i = B_i + A_i\)

\(End_{i+1} = \max(End_i, B_{i+1}) + A_{i+1}\)

\(= \max(B_i + A_i, B_{i+1}) + A_{i+1}\)

\(= \max(B_i + A_i + A_{i+1}, \ B_{i+1} + A_{i+1})\)

\(End_{i+2} = \max(End_{i+1}, B_{i+2}) + A_{i+2}\)

\(= \max(\max(B_i + A_i + A_{i+1}, \ B_{i+1} + A_{i+1}), \ B_{i+2}) + A_{i+2}\)

\(= \max(B_i + A_i + A_{i+1}, \ B_{i+1} + A_{i+1}, \ B_{i+2}) + A_{i+2}\)

\(= \max(B_i + A_i + A_{i+1} + A_{i+2}, \ B_{i+1} + A_{i+1} + A_{i+2}, \ B_{i+2} + A_{i+2})\)

  • 归纳通项

\(Ans_i = End_{i+N-1} = \max_{k=i}^{i+N-1} \left( B_k + \sum_{j=k}^{i+N-1} A_j \right)\)

  • 前缀和优化

\(设 \ S_k = \sum_{j=1}^k A_j \ ,则 \ \sum_{j=k}^{i+N-1} A_j = S_{i+N-1} - S_{k-1}\)

\(Ans_i = \max_{k=i}^{i+N-1} \left( B_k + S_{i+N-1} - S_{k-1} \right)\)

\(= S_{i+N-1} + \max_{k=i}^{i+N-1} \left( B_k - S_{k-1} \right)\)

  • 转化为滑动窗口

\(令 \ C_k = B_k - S_{k-1} \ ,则最终公式为:\)

\(Ans_i = S_{i+N-1} + \max_{k=i}^{i+N-1} (C_k)\)

tag : 构造 dfs

tag : 模型转化 数据结构 离线处理

  • 核心:岛数 \(=\) 区间内满足 \(h_i > x\) 的点数 \(-\) 相邻且两端都满足 \(h_i > x\) 的边数

  • 相邻边条件等价于:\(\min(h_{i-1}, h_i) > x\)

  • 离线:

  • 点:位置 \(i\),权值 \(h_i\)

  • 边:位置 \(i\) 表示相邻位置 \((i-1, i)\),权值 \(\min(h_{i-1}, h_i)\),其中 \(i \in 2, n\)

  • 所有询问按 \(x\) 从大到小排序

  • 点和边也按权值从大到小排序

  • 用双指针扫描,把权值 \(> x\) 的点和边分别加入两个树状数组

  • 对询问 \(l, r, x\):

  • 点数 \(= \text{query}(r) - \text{query}(l - 1)\)

  • 边数 \(= \text{query}(r) - \text{query}(l)\)

  • ans \(= \text{点数} - \text{边数}\)


1014

上午做 CSP-S2024真题,得分 100 + 60 + 35 + 0 = 195 > 180


下午改上午比赛


晚上写题单

tag : DP 线段树

  • 赛时想到了一个 \(O(n ^ 3)\)的 DP,得了 35 分

  • 后来发现状态可以优化:\(dpiv\) = 处理完前 \(i\) 个数,\(A_i\)​ 所在颜色最后值为 \(A_i\)​,另一种颜色最后值为 \(v\) 时的最大得分。(\(v=0\) 表示另一种颜色为空)

  • 但这是 \(O(n ^ 2)\)的,转移还可以优化:

  • 全局增量 \(add\)

  • 维护 最大/次大值

  • 这样就是\(O(n)\)的了


  • P8867 NOIP2022 建造军营

  • 终于改过了!

  • 发现是树形 DP 的状态不完整。

  • 需要对缩点后的子树的建造数分别计数。

  • 核心:缩点成树后,军营连通块对应树上的一棵最小子树

  • 桥必须看守,边双内部边自由(每条可选 \(2\) 种,最后统一乘 \(2^{m-\text{edcc}+1}\))。

  • 树上 DP 需要三个状态:

  • \(f0u\):子树内无军营;

  • \(f1u\):子树内有军营,且 \(u\) 在军营连通块中;

  • \(f2u\):子树内有军营,但 \(u\) 不在军营连通块中。

  • 转移时注意边 \((u,v)\) 看守与否的选择数:

  • 从 \(f0\) 接入 \(f1\) 时,若看守 边,则 \(u\) 进入连通块 → 归入 \(f1\)(\(1\) 种);

  • 若不看守 边,则 \(u\) 不进入连通块 → 归入 \(f2\)(\(1\) 种)。

  • 不能两者都乘 \(2\),否则会重复计数并漏掉 \(f2\)。

  • 最终答案:\((f1\\text{根} + f2\\text{根}) \times 2^{m - \text{edcc} + 1} \bmod 10^9+7\)。

  • CF1858E2 Rollbacks (Hard Version)


1015

上午打 CF2231,100 + 100 + 100 = 300 rank = 4


下午改上午比赛,过了 D 题(贪心),被一个绿题P10334 UESTCPC 2024 饮料卡了两个小时


晚上写 Vjudge题单 (数据结构)10月3日下午专题



tag : DP 数据结构

  • 把"区间内整除链计数"离线拆成"从右往左枚举左端点 + 在终点打标记求前缀和"

  • 而每条链只挂在它首元素的倍数上,所以时间复杂度是对的

  • 详细:

  • 按终点分桶 :一条链首下标 \(\ge l\)、末下标 \(\le r\) 就必在 \(l,r\) 内,于是询问 = 对"终点位置"的前缀和,区间计数 → 前缀和问题。

  • 滚动左端点 \(l\)(差分) :\(S_l=S_{l+1}+C_l\),\(l\) 从 \(n\) 降到 \(1\) 时只需累加"以 \(l\) 为起点"的增量 \(C_l\),不重算。

  • 性质 :链长 \(\le\log_2 n\),且链头为 \(a_l\) 后所有元素都是 \(a_l\) 的倍数 → \(C_l\) 只在 \(a_l\) 的倍数处非零,规模 \(\sum n/a_l=O(n\log n)\)。

  • 值域 DP :按值从小到大枚举倍数,把 \(C_l(y)\) 推给后继 \(z\)(前驱值必更小,天然有序),用 \(posz >= posy\) 保证下标递增;结果单点加进树状数组,询问取前缀和。

  • 复杂度 \(O(n\log^2 n+q\log n)\)。


1016

上午打 模拟赛 - 20261016 20 + 9 + 48 = 77,不太好
赛时:
赛后:

  • T1 Krugomet

  • 一直在考虑拓扑,但是对于环的讨论太复杂,没有想到正解是倍增

  • T2 Yet Another Array Counting Problem (NOIP Adaptation)

  • T3 Tornjevi

  • 这道题有个很神秘的性质,如下转化很巧妙

  • 对于每个蓝色块 \(+ 1\)

  • 对于每个红色块 \(- 1\)

  • 答案即为前缀最大差值,可用线段树维护

  • T4 Harmonija

  • 赛时写了一个 \(O(q * n)\) 的暴力树形DP,但是有细节错误,爆0

  • 赛后改了 62 分,正解很复杂,没有继续优化


1017

今天上午打成外模拟赛
100 + 5 + 12 = 117 rank = 1
下午改上午比赛,然后听成外线上讲解
发现 T2 DP的状态非常巧妙,很难想到

题解如下:川剧复演 题解


1018

今天上午放假,在家学习 NCE3 L4

下午返校,打比赛CSP-S公益营第一套 (2:30 --- 6:30)

得分:100 + 40 + 25 + 30 = 195 不错

但 T1 卡久了,后面时间不太够

晚上听评讲,讲的不错


1019

上午竞赛,下午常规,都改过了 T2

CSP-S公益营第一套

这套比赛的 T2 很不错,详情见字符串 题解

晚自习写题单:动态规划进阶

A 掉前三题,比较简单,不再赘述


1020

今天上午自己打比赛 CSP-S 2026 提高级模拟赛 Day7

得分 : 100 + 0 + 40 + 20 = 160 rank = 10

下午上常规,做物理机械能守恒实验

晚上改上午比赛

T2, T3比较有价值,均已改过

详细题解总结如下:

积木游戏 题解

方阵游戏 题解