文章目录

‹
›

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

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

1005

tag : 反悔贪心

  • 二分转判定

  • 枚举分界线

  • 扫描线

  • 反悔贪心 pre[i] + suf[i] >= k

  • CF 1367D

tag : 构造 性质 调整法

  • \(b[i] = 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”替代,漏掉了“部分刷色、整体不含”这一中间状态

  • 正确的状态是同时维护 \(f[l][r][c]\)(区间全变成 \(c\))和 \(g[l][r][c]\)(区间不含 \(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 分

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

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

  • 全局增量 \(add\)

  • 维护 最大/次大值

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


  • P8867 [NOIP2022] 建造军营

  • 终于改过了!

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

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

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

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

  • 树上 DP 需要三个状态:

  • \(f0[u]\):子树内无军营;

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

  • \(f2[u]\):子树内有军营,但 \(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\)(前驱值必更小,天然有序),用 \(pos[z] >= pos[y]\) 保证下标递增;结果单点加进树状数组,询问取前缀和。

  • 复杂度 \(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比较有价值,均已改过

详细题解总结如下:

积木游戏 题解

方阵游戏 题解


1021

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

得分 20 + 100 + 40 + 20 rank = 3

T1赛时写的是正解,但应为折半搜索的一个下标写错了,挂了,赛后改,还要加上极限卡常才能通过

T3比较数学,具体推导如下:

  • T3

    • 暴力是枚举 。突破口是:\(\gcd(i,n)\) 的取值非常少——它一定是 \(n\) 的约数,而 \(10^7\) 以内约数最多的数也只有几百个约数。所以改为枚举 \(d=\gcd(i,n)\),数一数有多少个 \(i\) 取到这个 \(d\)。

    • 计数:\(\gcd(i,n)=d\) 成立,首先要 \(d\mid n\) 且 \(d\mid i\)。设 \(i=d\cdot k\),\(n=d\cdot m\),则

      \(\gcd(i,n)=d \iff \gcd(k,m)=1\)

    • \(k\) 在 \([1,m]\) 中与 \(m=\frac{n}{d}\) 互质的个数,正好就是欧拉函数的定义:\(\varphi\left(\frac{n}{d}\right)\) 个。每个这样的 \(i\) 贡献 \(\frac{n}{d}\),于是

      \(\sum_{i=1}^{n}\frac{n}{\gcd(i,n)} = \sum_{d\mid n}\varphi\left(\frac{n}{d}\right)\cdot\frac{n}{d}\)

    • 最后一步换元:\(d\) 跑遍 \(n\) 的所有约数时,\(\frac{n}{d}\) 也跑遍所有约数,把 \(d\) 换成 \(\frac{n}{d}\) 得到

      \(f(n)=\sum_{d\mid n}d\varphi(d)\)

  • 复习了数论,并用概率的思想理解了欧拉函数的计算,如下:

  • 由算术基本定理 \(N = p_1^{c_1} p_2^{c_2} \cdots p_m^{c_m}\),则:

    \[\varphi(N) = N \cdot \frac{p_1 - 1}{p_1} \cdot \frac{p_2 - 1}{p_2} \cdots \frac{p_m - 1}{p_m} = N \cdot \prod_{i=1}^{m} \left(1 - \frac{1}{p_i}\right) \]

    证明:

  • 假设要在 \(1 \sim N\) 里挑一个数,它不能是 \(p_1\) 的倍数。

    \(1 \sim N\) 里,是 \(p_1\) 倍数的数占了 \(\frac{1}{p_1}\),所以不是 \(p_1\) 倍数的数就占了 \(\left(1 - \frac{1}{p_1}\right)\)。

    同理,它不能是 \(p_2\) 的倍数,剩下的概率再乘以 \(\left(1 - \frac{1}{p_2}\right)\)。

    因为这些质因数之间是相互独立的,所以我们可以直接把概率乘起来。

    最后,总数 \(N\) 乘以总概率,就是满足与 \(N\) 互质的个数了。

晚上写题单: 动态规划进阶

  • CF1882D Tree XOR

  • tag : 贪心 换根DP 性质

  • 详细 CF1882D Tree XOR题解

  • 巴厘岛的雕塑

    • 只写了一个 70 分的暴力 DP
  • CF1515E Phoenix and Computers

  • 思路

    • 若有 \(k\) 个手动连续块,则自动打开 \(k-1\) 台,手动打开总数 \(m=n-k+1\),且需 \(m\ge k\),即 \(k\le \lfloor (n+1)/2\rfloor\)。

    • 长度为 \(L\) 的手动连续块内部合法顺序数为 \(2^{L-1}\),因为每次最后手动打开的只能是当前剩余段的端点。

    • 若第 \(i\) 块长度为 \(l_i\),则交错合并方案数为 \(\frac{m!}{\prod_{i=1}^k l_i!}\),总贡献为 \(m!\prod_{i=1}^k \frac{2^{l_i-1}}{l_i!}\)。

    • 设 \(w[L]=\frac{2^{L-1}}{L!}\),令 \(dp[i][j]\) 表示手动总数 \(i\)、分成 \(j\) 个连续块的权重和:
      \(dp[i][j]=\sum_{L=1}^{i}dp[i-L][j-1]\cdot w[L]\)
      初始 \(dp[0][0]=1\)。

    • 答案为
      \(ans=\sum_{k=1}^{\lfloor (n+1)/2\rfloor} fac[n-k+1]\cdot dp[n-k+1][k]\)。

    • 复杂度 \(O(n^3)\),空间 \(O(n^2)\)。


1022

上午打比赛,【LGR-307】SCP 2026 第二轮(复赛 S 组)模拟

赛时得分:100 + 35 + 15 + 6 = 156

下午改题,T3,T4全是黑题?

T2很不错,详细题解:P17723 [SCP-S 2026] 函数 / func 题解

T4也改过了

晚上改前面的模拟赛,改过CSP-S 2026 提高级模拟赛 Day6 T2

是一个较为模板的树形DP,注意从子结点向父亲合并是的状态设计

然后练习码力,P9754 [CSP-S 2023] 结构体,还未 AC

posted @ 2026-10-20 21:10  lvwangshu  阅读(20)  评论(0)    收藏  举报