长期记录
12.1
vp CF1528
A
直接贪心,其实第一下没有反应过来 \(\sum|a_i-x|\) 是单峰的。
B
神秘计数,还是老毛病,思路一旦乱了就要画一段时间捋清。
C
比较擅长的种类,做的很顺。
D
图论建模,不够熟练,分析本质比较慢。
E
很牛的计数,感觉做的很不顺,不过细节确实多(都 *2900 切掉就是胜利
直接对树 dp 就好了,统计答案需要大量分讨。
NOIP2024 C.traverse
改过来了,感觉其实很好的题目,一步步思路很清晰,就是老毛病,赛时思绪太乱了,再接再历。
考场思路 \(f_u,g_u,h_u\) 一点问题没有捏 qwq。
CF1943 D2
感觉很牛的计数,直接 dp 就是 \(f_{i,x,y}\),\(O(n^3)\),只能 D1,没有任何优化余地。
于是正难则反,做一步容斥,然后发现由于相邻不会同时不合法容斥不会算重,然后就直接 dp 了。
CF1097 G
经典但是一直不会的套路:
然后对着 \(f(X)\) 做组合意义的 dp 就好了,很厉害,本身 dp 也很神秘
12.2
vp CF1874
A
直接贪心,容易的
C
感觉很好玩的 dp,就是算出来期望发现 \(c>2\) 时怎么选都一样,故考虑策略为每次选最大的,然后直接算就好了。
B
套路拆位压状态,直接做就好了。
D
推柿子之后直接 dp ,是 \(O(m^2n)\) 的。
然后发现一序列不降,所以限制一下第二维就是 \(O(nm\log n)\) 的了。
拟阵
感觉很牛,记录一下
拟阵(matroid)的定义为 \(M=(S,\mathcal{I})\),\(\mathcal{I}\in 2^S\),其中 \(\mathcal{I}\) 应满足三个条件:
- \(\varnothing\in\mathcal{I}\)
- \(I\in\mathcal{I},J\subseteq I\Rightarrow J\in\mathcal{I}\)
- if \(I,J\in\mathcal{I},|J|<|I|\),then \(\exists x\in I\backslash J,J\cup \{x\}\in\mathcal{I}\)
典型的拟阵:图拟阵,匹配拟阵
看起来没什么用,实际上很牛。
如果证明了一个最优化模型是拟阵的话,那么就可以直接按照优劣排序依次加入,如果仍然合法那么就继续加入(比如 Kruskal)。
然后另一个比较牛的是拟阵交。
不妨设 \(M_1=(S,\mathcal{I_1}),M_2=(S,\mathcal{I_2})\)。
先给一个 \(D_{M_1,M_2}(I)\) 的定义:
对于 \(y\in I,x\in S\backslash I\),
如果 \(I-\{y\}+\{x\}\in \mathcal{I_1}\),\(y\) 到 \(x\) 有边。
如果 \(I-\{y\}+\{x\}\in \mathcal{I_2}\),\(x\) 到 \(y\) 有边。
直接说一下算法流程:
初始 \(I=\varnothing\)。
接下来循环一下几步:
- 构建出 \(G\leftarrow D_{M_1,M_2}(I)\)
- \(X_1\leftarrow\{x\notin I|I+\{x\}\in\mathcal{I_1}\}\)
- \(X_2\leftarrow\{x\notin I|I+\{x\}\in\mathcal{I_2}\}\)
- 求出 \(G\) 中 \(X_1\) 到 \(X_2\) 的最短路 \(P\)
- 如果不存在 \(P\) 退出
- \(I\leftarrow I\Delta P\)
最后的 \(I\) 就是最大拟阵交。
如果要求最大权拟阵交的话,就搞个点权:
每次选取 \(P\) 优先最小权,然后再最小长度即可。
题目写了个 CodeChef CNNCT2。
CF1874E
dp 是显然的,\(O(n^6)\) 是爆炸的。
卷积是显然的,\(O(n^4\log n)\) 会炸不说,1e9+7 也在向你招手。
所以说要另辟蹊径。
题解告诉我们,可以设生成函数,那么就可以先 \(O(n^4)\) 暴力 dp 出 \(\frac{n(n+1)}{2}+1\) 个点值,然后再 \(O(n^4)\) 暴力拉插出来原来的系数,也就是 dp 值。
trick++
CF1936 D
传统题,第一眼以为裸支配对,直接敲,然后快敲完了发现还有修改(
所以就拿线段树直接维护变化点,合并拿双指针扫一遍, \(O(n\log n+n\log V+q\log n\log V)\)
没写完,明天写
鸽了若干天
12.16
哥哥的杂题选讲1
qoj8807
小清新构造。
一个主要的思路就是把两个点都向根移动,我们可以取直径中点为根,这样 \(\max d_u \le 50\),但是对于所有 \(ds(u,v)\le 6\) 的点对就无法处理了。
于是考虑可以一个点走一个点停类似的方法,让距离较小的点先相遇,这样需要 200 步,只用处理 \(ds(u)\le 13\) 的点。
然后乱调参,总之是过了。
qoj9863
之前打 ucup 遇到了,当时想的是直接挂猫树,也就是直接分治求每一段的哈希,当时由于时间不够就没写。
考虑到这个写法虽然简单直接,但是又糖又长又难调,不能说没有优势,只能说烂的一比,所以搞了一个直接扫描线的做法。
考虑先上一个单调栈,然后可以上并查集均摊维护非单调栈的点是否合法,然后哈希的话直接对单调栈内部的东西哈希就可以了。
qoj9870
直接多项式快速幂需要 \(O(m\log m)\) 的复杂度,瓶颈在于 \(m\) 大的离谱。
一个特殊的事情是 \(m\le n^2\),所以就可以给每一个 \(a_i\) 减去 \(\lfloor\frac{m}{n}\rfloor\),然后我们最后只需要多项式的第 \(m\bmod n\) 项就可以了,然后就是一个经典的 trick,如果有方案一定存在一种始终保证和在 \([-n,n]\) 的顺序。所以直接多项式快速幂,只保留 \([-n,n]\) 的项就可以了。
然后他妈的 WA 麻了。
最后经过 1h+ 发现他妈 NTT 炸了?
但是 NTT 要是炸了不应该全炸没了吗?
然后每次都还原 NTT 的数组手动去掉无用的项就对了,原因是如果不清空的话就会导致原数组不唯,NTT 就会爆炸。
太他妈深刻了。
qoj9812
神秘。
一个结论是不合法的串只会是 \(0011001100110011...\) 这个无限长串的子串。可以反证发现对于其他不合法串必然有比他更短的这类串。然后直接乱 dp 就好了。
12.17
省选模拟赛 Day 3
A 题一眼大模拟,直接开写。1.5 h 过了除了样例 2 以外的三个样例。
调试了一会发现这组样例不满足题意,难绷,那就当过了。
B 题先秒一下 \(k\le 5\),然后分析了依托性质,有了一个 \(O(c(S)k(k+|S|))\) 做法,比较幽默的是两档特殊部分分都由于 k 开了 5000 导致这个需要大量分析性质切还比较接近正解的暴力一分没有。怀疑dls有没有想过部分分怎么写。
然后继续想,发现可以压状态,但是转移又慢了,然后发现转移系数差不多可以用卡特兰数和组合数卷积搞出来。然后就对 \(O(c(S))\) 类一起做半在线卷积,复杂度 \(O(c(S)(k+|S|)\log^2 k)\)。
然后只有 30 min 了,这我写你妈,写完了估计也调不出来,调出来估计也常数太大。随便敲个 C 题 10pts 跑路。
然后 0+30+0。
??????
我操我 A 怎么炸了。
调调调发现写错一点 \(q=2,n=2\) 都会炸的细节,难绷。
\(130\rightarrow30\),糖没了。
B:utpc2020B
实际上我是从另一个角度分析的性质导致颗粒无收。
直接考虑差分,发现操作一次相当于把 -1 前移并合并,然后后面缩一位。
然后就 dp 长为 i 的 \(0\) 可以还原出多少种,由于边界有不同的转移,所以分三类 dp 一下乘起来就好了,复杂度 \(O((n+|k|)^2)\)
C:反转了!
神奇构造题。
考虑有解充要条件,只有两个:奇偶性/只能一起操作的要一致。
然后可以把 \(n\gt 2d-1\) 逐个还原致 \(n=2d-1\)。
\(n\lt 2d-1\) 通过最多一次改变正负号来变成 \(n=2d-1\)。
所以只要能 \(n\) 次构造出 \(n=2d-1\) 即可。
dls 的做法是左边过去右边回来,然后就是满秩的,只要奇偶满足一定可以解出。手动消元即可。评价是这辈子会不了的。
还补了染色,感觉还是只会裸容斥,上点难度就爆炸。
12.18
直接就是一个 ucup (TTPC2024 div.1)所有题的讲,感觉这场 ucup 难的离谱。
vp 启动。
他妈的一道题也不会。
然后最终决定开 B 题。
B
首先发现 1 只能在末尾存在。
然后发现一般的 2 只能平展,3 的展开是一个卡特兰状物。
然后末尾的 2 可以融入到 3 里面,又是一个卡特兰状物。
然后全乘起来就好了。
然后发现 XYE 和 ymh 都在对着 J 手玩。
然后看了看 I 题这个神秘交互,决定做 I(?
I
考虑交互给出信息的本质是什么。
我们考虑一个 \(n\) 个点的无向图,\(u\) 与 \(v\) 有边当且仅当 \(|a_u-a_v|\le k\),于是就相当于你可以询问一个子图 \(G'\) 内部的边数。
再考虑 \(1\) 与 \(n\) 与其他数字有什么本质区别。
发现只有这两个点度数为 \(k\),其他都要大于 \(k\)。
然后又发现可以通过边数计算度数和。
也就是两次询问可以得到一个 \(\sum\limits_{u\in S}dg_u\)。
这不直接分治做...吗?
可能每一层都会递归下去更多区间!!!
但是实际上呢?
我们发现每层分治最多只会有 k+1 个,因为总的度数的限制。
感觉容易 TLE,于是写了 while 代替递归。
然后就 TLE 了。
??????
把 cin/cout 全改成 scanf/printf。
怎么还 TLE ???
哦是不是次数超了!!!
发现实现浪费了一半次数,于是又精细实现了一下。
过了!!!
然后看 L,依托,扔了,看 C/K 不会,摆。
然后听哥哥爆讲 13 道题。。。
K
牛牛题。
首先可以考虑把孤立点先都扔了。
然后发现可以手动缩一部分等价类,这样只有 \(O(n)\) 的点了,然后直接分治再拿并查集均摊维护一下貌似就可以了(?
但是官解更优雅,只需要连最极端的边就好了,然后就是 \(O(n)\)/\(O(n\alpha(n))\),很牛啊。
E
传统 CNOI 题目。
发现对于一个区间一定在 (\(\min x_i\),\(\min y_i\)) 开始最优,于是直接区间 dp 就可以了,没什么好说的。
A
还比较有意思的题目。
首先发现割边最开始去掉一定最优,然后考虑一个边双怎么去掉。
如果存在边 \((u,v)\),且 \(dg_u=dg_v= 2\) 那么可以想名义上把它删掉,剩下的递归下去,实际上最后加进来就好了。
那么如果不存在呢?
通过手玩发现必然无解,删谁也不行。
于是就做完了。
L
鉴于过的人最多,还是看了看。
感觉捋清楚还是很好做的。
考虑一对 \(i\lt j\),\(A_i\gt A_j\),不妨设 \(i,j\) 最高不相等的位置为 \(x\),\(A_i,A_j\) 最高不相等的位置为 \(y\),发现 \(x\neq y\) 的情况逆序对和顺序对是完全对称的,于是考虑我们求一个逆序对减顺序对,这样这种 case 可以直接 skip 了。
于是直接对于 \(x=y\) 的 case 推个柿子算一下就好了,确实是简单题,就是题面太恶心了。
F
神仙题。
如果两条线夹角不是 \(\frac{\pi}{4}\) 的倍数,不妨设交点为 \(O\),那么对于一个点 \(A\),可以到达 \(O\) 为圆心,\(OA\) 为半径的园上任意一点。
我们成一条线为喵喵线当且仅当它与 x 轴夹角不是 \(\frac{\pi}{4}\) 的倍数。
那么于是当所有点过圆心且有喵喵线的话,两个点可达当且仅当两点距离原点距离相等。
当有喵喵线且不是所有点过圆心,我们惊奇发现所有点两两可达(感性理解是这样的,因为你爱怎么画⚪就怎么画⚪,严谨证明不会)。
于是只需要处理所有线都不是喵喵线的情况。
我们将线分为四类,称为 \(t\) 线(\(t\in \{0,1,2,3\}\),表示与 x 轴夹角为 \(\frac{t\pi}{4}\))。
首先我们考虑只有 \(0\) 线与 \(2\),不难发现两维独立,于是分别考虑。
先来考虑 x 轴,不妨设坐标分别为 \(x_1,x_2,...,x_t\)。
于是比较容易可以知道 \(a,b\) 可达当且仅当 \(a\equiv b\pmod{2g}\) 或 \(a\equiv -b\pmod{2g}\),其中 \(g=\gcd\limits_{i,j}(x_i-x_j)\) 充分性和必要性都是显然的。
同时我们发现,\(x_1,x_2,...,x_t\) 与 \(x_1,x_1+g\) 是完全等价的。
接下来考虑如果带有 \(1\) 线和 \(3\) 线改怎么做。
我们还可以发现另外一个事:把一条线 \(l1\) 关于 \(l2\) 对称之后也是等价的。
于是我们可以把所有 \(3\) 线通过 y 轴变成 \(1\) 线,然后把所有 \(2\) 线通过 \(1\) 线变成 \(0\) 线,再把 \(1\) 线变成只有 2 条。
于是此时等价于有 \(x=ng\),\(y=ng\),以及两条 \(1\) 线。
考虑到 \(1\) 线什么时候用都可以,于是枚举用哪些,这样就是没有斜线的 case 了,然后就做完了。
12.19
省选模拟赛 Day4
懒得记录了。
T1切T2没时间T3没时间
\(100+40+0\rightarrow 30+40+0\)
12.20
难难难难难难难难难难难难难难

浙公网安备 33010602011771号