2025总结
2025暑假总结
前面在上文化没来
7.26 字符串
A
不难考虑到,对于每一个其他串,都能通过最多一次操作把它变成目标串,显而易见的,我们可以先预处理出所有换位置后可以达到目标串的位置然后进行 \(DP\)
B
\(KMP\) 板题,跳
C
\(KMP\) 自动机板题,跳
D
先哈希,在枚举分割点,易得得数的位数至少得是总位数的三分之一。这里卡了一手哈希,提供一个模数 \(12345691\)
E
考虑贪心,先从左边开始删靠近端点的,再从右边开始,简易证明:每次从左边删如果删过了根据回文性质可以说右边有一样可以消掉的,所以保证当前不劣
7.27 模拟赛
A
首先可以考虑先进行二进制拆分,不难得出,只有在 $ X \And Y$ 时贡献为1, 否则就是二。所以统计出每个二进制位数计算答案,最后在容斥一下就行了
B
先讨论无解情况,考虑到有超过两个长串或有一个超长串时无解,然后在讨论有几个长串,如果只有一个直接暴力枚举,如果有两个则判断他们是否相同即可
C
最小值最大可以用二分答案,$ K <= 17 $ 容易想到状压,所以直接二分加状压 \(Check\)
D
牛客223600,有点没看懂不知道为啥是线段树
7.28 ~ 7.29 DP
\(Day 1 \ A\)
考虑在染色后除了 \(0\) 都可以进行传递所以预处理出所有 \(0\) 的位置,然后递推即可
\(Day 1 \ B\)
很容易得出,我们要把尽量多的水汇集到几个瓶子里是不可能反复倒的,所以我们考虑留多少水,我们同时考虑剩余容量与已有水量,最后取最大值即可
\(Day 1 \ C\)
首先可以考虑到如果要的照片数小于 \(n\) 除以 \(k\) 那么一定无解,然后一定的区间内一定要有可以联想到滑动窗口,于是这题就变成了优先队列优化 \(DP\) 板题
\(Day 2 \ A\)
考虑 \(f_{i, j}\) 表示前 \(i\) 个数,时间为 \(j\) 时,最大的答案,最后取 \(\max f_n\) 即可
\(Day 2 \ B\)
考虑 \(f_{i, j}\) 表示前 \(i\) 个数,图了 \(j\) 行或列,所需的最小代价,答案就是 \(f_{n, k}\)
\(Day 2 \ C\)
数据范围很大考虑离散化,区间修改查询最大值考虑线段树,与处理好后直接做查询那些保留即可
\(Day 2 \ D\)
考虑到路径类型都是 \(2^k\) 所以考虑倍增 \(DP\) ,然后在从高位到地位贪心就好
\(Day 2 \ H\)
考虑贪心,以 \(\max(s, a)\)为第一关键字, \(s\) 为第二关键字排序,然后暴力循环求解即可
\(Day 3 \ A\)
令 \(dp_{i, j}\) 表示使串串最多含有
hard的前 \(j\) 个字母的代价,有:\[ \begin{cases} dp_{i, j} = dp_{i - 1, j} (s_i \neq hard(j)) \\ dp_{i, j} = \min(dp_{i - 1, j} + a_i, dp_{i - 1, j - 2}) (s_i = hard(j)) \end{cases} \]然后考虑滚动数组可以优化掉第一维
7.30 模拟赛
\(A\)
赛时一眼贪心,但发现伪了,后面改成 \(DP\) ,满级 \(1.5h\) 过 \(A\) 题
考虑 \(f_{i,j}\) 表示前 \(i\) 个建筑至少 \(j\) 级最大分数,然后考虑转移,当第 \(i + 1\) 个的等级大于等于前 \(i\) 个的最小值,就不用改,随后加上 \(d_i\) 就行
\(B\)
赛时看错题面,写半天发现题面不对,直接改暴力
考虑到 \(k \le i \And j\) 可以得出 \(k \And i \And j = k\) 所以直接枚举子集就好了
\(C\)
赛时暴力,但挂了,样例还是太水了
对于 \(sb1\) 就直接 \((n + 1) / 2\) 就好
\(D\)
赛时先考虑了二分,写完发现没有单调性
最后还是不会
总结
时间分配不合理,题意看错导致浪费了很多时间,下次先看清题再写
7.31 ~ 8.1 组合数学
\(Day 1 \ A\)
首先模拟二分,求出有几个大于 \(pos\) 几个小于 \(pos\) 的,然后考虑排列即可
\(Day 1 \ B\)
容易推导出,答案最大是 \(3\) ,最小是 \(2\) ,影响的因素只有两个 \({n, x}\) 和 \({y, n}\),分类讨论后直接输出即可
\(Day 1 \ C\)
考虑到杨辉三角 \((^{x + y - 2}_{y - 1})\),要求的为 \(\displaystyle\sum_{i = 1} ^ {n + 1} \sum_{j = 1} ^ {a_i} (^{i + j - 2}_{y - 1})\) ,把两个 \(\sum\) 化简一下得到 \(\displaystyle \sum_{i = 1} ^ {n + 1} (^{a_i + i - 1}_{a_i - 1})\) 暴力求解即可
\(Day 1 \ D\)
考虑正难则反先算出可以构成的总方案,然后减去不合法方案,枚举那个成为最长边分三类减去即可。
\(Day 1 \ E\)
考虑把二叉树中序遍历展开,得到一个单调不降的序列,求填入数字的方案,对于每一段要填入的序列,求解即可
\(Day 2 \ A\)
考虑到只有两种染色方式,所以答案为\((^{n/3}_{n/6})\),然后考虑是否有边相等,有几个相等乘以几即可
\(Day 2 \ B\)
容易得出,总方案为 \(n!\), 然后容斥一下就好
\(Day 2 \ C\)
对于每个数计算当前位置的贡献,前面 \(i - 1\) 个位置,与后面位置的方案数相乘即可
8.2 模拟赛
\(A\)
赛时一眼二分,写完后发现样例全过,把原本的跟上次 \(T4\) 相似的想法怼回去了,最后挂50
考虑到二分出的答案偏大,我们把他减小500来暴力找答案即可
\(B\)
赛时没思路,写部分分,但挂了
考虑到每个连续的问号串有几种情况,两端是 \(0\),两端是 \(1\), 一端是 \(0\), 一端是 \(1\),易得,第一种情况加入1会使答案加二,第二种情况只有全填一才会使答案减少 \(2\), 而最后一种情况,答案不会改变,我们直接贪心填 \(1\) 即可
\(C\)
赛时想到并查集,但发现不能路径压缩,算了一下时间,觉得会 \(T\),就没写痛失 \(100\)
其实很简单,在并查集里暴力跑就可以了,但注意,不能路径压缩
\(D\)
赛时没一点思路,只想到了判无解的方法
总结
赛时过于相信自己直觉,没有仔细推理
8.3 ~ 8.4 图论
\(Day 1 \ A\)
暴力建边,然后跑 \(DFS\) 即可
\(Day 1 \ B\)
直接跑迪杰斯特拉,遇到怪物 \(continue\) 就好
\(Day 1 \ C\)
把每一行每一列当作点,每一块地当作图,直接跑匈牙利算法即可
\(Day 2 \ A\)
直接二分查找答案,然后拓扑排序,如果有环就一定可以达到
8.4 模拟赛
\(A\)
赛时退公式推 \(1h\) 推出来了,带入二项式公式求解即可
\(B\)
赛时推公式退了很久很久,最后发现贪心错了,浪费 \(2.5h\),最后写暴力 \(40\)
考虑到因数总是成对出现,我们把所有答案算出来除以二便是答案
\(C\)
赛时拿 \(25\) 部分分
考虑 \(DP\) 对于每个位置向上还是向右,显而易见这是 \(n ^ 2\) 的,可以使用线段树进行优化
\(D\)
赛时由于 \(A \ B\) 浪费时间太多导致没时间写暴力最后遗憾离场
8.6 ~ 8.7 树上问题
\(Day 1 \ A\)
直接暴力跑DFS, 每个点可能的贡献就是他的深度减去他的子树大小,最后将最大的 \(k\) 个加起来即可
\(Day 1 \ B\)
不难证明在只能选一个点的时候肯定会选直径的终点,然后考虑贪心选择最优的点即按照点的深度与子孙最大深度的差排序取前 \(k\) 即可
\(Day 1 \ C\)
考虑树型 \(DP\) 设 \(f_{i, j}\) 表示第 \(i\) 个点的子树中距离 \(i \ j\) 个单位的答案总和,对于 \(j > 0\) 没什么好说的,直接把子树答案求和即可,对于 \(j = 0\) 的,考虑多出了可以往下跳的再加上 \(u\) 的子树大小即可
\(Day 2 \ A\)
考虑让 \(R_i\) 最小所以要让每个父亲和儿子的点权相减最小,这就很简单了,考虑 \(DFS\) 序即可
8.7 模拟赛
\(A\)
赛时考虑正难则反但是写了 \(O(n^2)\) 的转移,痛失 \(40\) 分
先处理出所有数列的答案,再一个一个删,每次删掉关键点重构即可
\(B\)
赛时考虑贪心,但是假了
一个区间 \([l, r]\) 是可被消除的,有且仅有偶数下标元素和和奇数下标的元素总和相等,于是维护每一次操作后就没有了的位置个数即可
\(C\)
赛事考虑暴力,但写挂了
现在不懂别看了
\(D\)
赛时没时间了
最小割?我网络流就是一坨
8.8 数论
\(A\)
不难考虑要让初始数最小,每次可以选择每个数的最大质因数,反过来推一下即可
\(B\)
把原式化简一下可得 \(k = gcd / c * k_a * k_b * d\) 所以我们枚举 \(k\) 的所有因数,然后把方案数相加即可
\(C\)
考虑把所有不能一起选的数分为一组,可以得到一堆链,对于每个链单独考虑然后相乘就是答案,所以现在考虑如何求长度为 \(n\) 的链的方案数易得这是一个肺部垃圾数列

浙公网安备 33010602011771号