Atcoder/Codeforces 做题记录 [2020.9~2020.11]

· · 个人记录

CSP 前的做题记录。

重心大概是这样:

先 AGC,再做 ARC,抽时间看 CF 题。

这些基本上是我没做出来的题目,也有一些我自己做出来但是很有记录价值的题目。

"*" 表示自己到现在还没做或者不会。

upd on 10.23:不行啊,总结一直咕咕咕,到时候全忘了...

upd on 11.4:没时间了,所以总结先咕了...

\color{red}\text{AGC}

AGC 041D

你退役吧。

咕咕咕

AGC 009E

神仙题...这个性质找的我心服口服。

先声明:m1n0

想到了枚举 1 的操作贡献...但是推到后面感觉究极复杂...还想到了 k 进制小数,但是有什么用吗?还是不会...

神秘的理解方式:转成 k 叉树!

这样就直观多了!每一次选择 k 个节点连成一个树!答案就是 1 的深度和!

其实这题转成树不是必要的...我们继续往下看:

首先找答案 x 存在的必要条件?

xk 进制下是 x_1x_2x_3...

这其实是显然的,这个 k 进制都压缩成这样了!!!

但是如果满足了这个条件,如何“解压”?就是把一个 \frac 1{k^y} 变成 k\frac 1{k^{y+1}}

像极了小学奥数,对吧?!!!

这两个必要条件充分吗?还没有考虑 0 !!!

其实这是一样的,考虑把 0 换成 1 以后,拼成的就是 1-k。所以:

1-xk 进制下是 y_1y_2y_3...

其实 2,4 是等价的。这样充分了吗?充分了。总结一下:

三者成立。

找到了条件,接下来就可以枚举 k 进制小数 dp 了!!!但是还有 1-x 怎么办?

这里还是很妙,把 1-x 的条件转化成 x 的条件!

根据进位,假设 x,1-xl 位小数,那么有加起来是 k-1,k-1,k-1,...,k-1,k 的形式,所以:

\sum x_i \ +\sum y_i=l(k-1)+1

这样条件就转化成功了!

接下来就是一个简单的 dp + 前缀和优化。注意不能有后缀 0,所以要开 2 维!

时间复杂度 O(n^2)

总结:

这个合并转树的思维确实要有...就是合并转化为建树的思想,在 AGC 022F 里用上了!!!因为合并以后就是一起的了,所以可以用树的节点替代!

接下来是一堆总结的套路:

AGC 025D

咕咕咕

这题都完全不会,没救了,连第一步都没想到 /px

upd:这是套路了,详见 CF 1270E。

总结:

AGC 006E

咕咕咕

这个构造实属强大,提前剧透就真的没意思了...

排除一堆无解以后变成了;

AGC 002E

咕咕咕

神仙博弈模型转化,这种题实在是不可多得。

AGC 018C

刚开始想了不到 5 分钟突然想到了模拟费用流,感觉太难写了就看题解,没想到真有人写...orz Soulist.

但是这个贪心做法真的很经典很妙啊!

使用套路,先强制所有人选金牌,然后考虑选择一些改成银牌和铜牌。

如果只有银牌,按差值调整一下即可。

如果有 2 种呢?考虑继续使用调整法!假设 x 选择银牌,y 选铜牌比 x 选择银牌,y 选铜牌更优,那么 b_x+c_y>b_y+c_x。按照这个排序调整后,发现选择变成了前面选一些银牌,后面选一些铜牌,不能相交。还有个数限制,那么枚举分割点,使用堆贪心即可。

时间复杂度 O(n\log n)

总结:

把多种物品消去一种是一个好方法!

枚举分割点+堆的贪心套路不能忘啊!

调整法不要推错!调整法解决贪心是一个基本套路!调整以后是一些特殊情况了,解决它就完事了。

AGC 018F

什么神仙题啊,根本不会。

看起来毫无思路,但是我们可以从局部入手,先考虑一棵树怎么做。

注意到正负一的奇偶性相同,我们考虑 dp 出节点的奇偶性(如果两棵树一个点奇偶性不同就直接退出)。

然后怎么构造一棵树呢?我们可以缩小限制狭义构造,下面的构造说明每一个点权值只可能取到 -1,0,1

如果当前节点是偶数直接选 0,否则可以发现一个性质:子树奇数个数为奇数。所以子树一定可以两两配对,配对后一个 +1 一个 -1 即可。这样根节点就可以做到绝对值为 1 了。这个配对就是一个很简单的类树形 dp。

接下来 2 棵树怎么做?这就很麻烦?神仙操作来了:把两棵树两两配对的关系拿过来建图,得到的一定是二分图!为什么?

证明:一个点显然在一个树里只会连一条边,所以得到的图每个点的度数为 2。如果出现了奇环:对于一个点两条边一定是来自不同的树,对这个边按照树染色,如果是奇环一个点就在一棵树连了两条边,这样就矛盾了。

所以直接二分图染色,黑就是 1 白就是 -1,直接输出即可。

总结:

还是广义转狭义,增加特殊性质,然后转变成了匹配问题...

多个匹配限制,建图!观察得到是二分图!

用栈来维护匹配!

无解条件有时候很有用...

要多多观察,善于挖掘性质!

AGC 026E

这都不会,滚粗了。分割子问题的水平太垃圾了。

显然要对 s 的第一个字母进行分类讨论:

如果第一个字母是 a

那么显然如果选了这个字母,不妨设后面是 aaaa...ba,那么后面的这些 a 都应该不选。

这样就是关于后面 x 对的一个子问题了。

如果第一个字母是 b

那么假如选择了这个 b,不妨设后面是 bbb...ba,那么这些 b 都应该选。但是这样就不是一个子问题了,如何分割?

注意到这样选出来后字符串大概变成了:bbbb...a??a??a??b?a??a

可以证明,在这个选择 ? 的过程中最后会“闭合”,形成一个连续的 ab 串。而且这个串有一个性质:

都是 ba,没有 ab

为什么?根据题意可以反证出来。假设有 ab,那么一定已经闭合了。

因此这又是一个子问题,可以 dp,时间复杂度 O(n^2)

总结:

感觉字典序的贪心还是太菜了...

手玩,贪心,然后看看能不能分割子问题你!

善于观察子问题,设计 dp!

AGC 018D

咕咕咕

看了那篇关于匹配的文章就知道这题怎么想到了,不得不说这题 nb。

AGC 040C

咕咕咕

为什么正常做不了...指数做法都不知道对不对,震惊了。

AGC 011C

居然想了不到 5 分钟切掉了,尽管全世界都会 /px

手完这个走路过程,发现环很有意思,又发现奇环就全可以达到,偶环不行。

所以瞎分类一下就可以了。

总结:

提示自己:

这种手玩要看出什么黑白染色的东西!要注意奇偶讨论!!!

手玩!手玩!手玩!干瞪眼看不出来的!

AGC 011D

咕咕咕

想了 20 多分钟感觉很复杂,瞄了一眼题解发现好像很多人都会,然后继续想...接下来就想出来了...

AGC 011E

咕咕咕

神题...感觉自己根本不会。

AGC 006C

这题好妙啊,听说是套路?

显然有一个很简单的期望 dp ,设 f_i 表示 i 位置的期望,然后就有方程 f_i=f_{i+1}+f_{i-1}-f_i

接下来怎么优化?矩阵...?

神奇操作来了,差分,发现 f 数组的差分数组在一次操作下就相当于交换了相邻两个数...直接对于置换快速幂即可。

时间复杂度 O(n\log k)。注意置换只满足结合律,不满足交换律,写的时候很容易错!最好重载一下...

总结:

序列操作,差分一下也许会有好玩的事情发生...这题也太不明显了。

置换的乘法!群论好好学一下!

AGC 013D

想了 30 分钟还在题解“折线”的提示下才切掉(虽然不说我也能想到,只不过可能会慢一点),我菜 /kk

这是一道去重的计数好题。

首先这个限制就相当于确定了前缀和 -1,1 的上下界。所以可以枚举上下界直接做,可惜这样就重复了,因为我们要的只是颜色序列。

如果我们枚举下边界,强制碰到下边界,好像就可以做了,可惜的是我们还需要记录上边界的历史最大值,时间复杂度 O(n^3)我搞出来了亿个 O(n^3)...

注意到一个很好的条件:极差最大就是 n。那么可以想到如果出发点不固定,批处理转移呢?这样就会算冲重了,但至少复杂度降下来了,考虑怎么去重:

接下来有两种去重方式:

所以初始值对于每一个起点都设为 1,然后转移即可。

ps:我一开始搞麻烦了,记了上下边界...注意 01 10 也要判断边界的。

总结:

批处理 dp,放一起转移的 trick 不能忘记啊!

如何去重?这几种各有长处,但本质是枚举关键的特殊信息!这种枚举边界的思想很妙!

一条路想不出来,换一条路啊...尤其是这种枚举方式多样的 dp 题...

对了,关于前缀和极差这些字眼要想到路径,这样那个去重方式就很直观了。

最近怎么自己想出来以后又感觉很妙啊,是不是已经凭借灵感做题了?

AGC 012C

真就只会二进制拆分...正解和我的出发点完全不同...感到恐惧。

那个 naive 的二进制拆分就不说了,级别是 \log_2^2 n 的。

注意二进制题可以套路倍增,考虑怎么构造才能做到 \times 2+1

接下来就很妙了,如果考虑**增量**构造,就是在原先的基础上做,第一个 $\text{aa}$ 就是 $1$ ,$\times 2 $直接 $\text{abab}$ ,也就是在两段之间插入新数即可。如果增量构造就相当于序列被分成了两段排列 $P,Q$,这样就可以做到 $\times 2 $ 了。 因此可以做到长度 $2\log_2 n$,本质不同的数 $\log_2 n$。 ------------ 总结: 二进制有关考虑**倍增**构造! 如果一个操作不好实现,考虑特殊的形式能不能实现,再利用归纳看看初始的是否满足这个性质,**增量**构造。 这样归纳就出来了。 ## AGC 012E NOI 前想了 20 分钟没想出来,现在打开题解我就发现自己当时降智了... 首先这个每次 /2 让我们想到了只会跳 $\log V$ 次,发现就是有 $\log V$ 层线段,问能不能第一层固定一个,剩下来每层各选一个,能不能全覆盖。 然后我就不会了,怎么做怎么炸。 然而这离正解其实还差了一扇门... 按照层顺序根本不能做,如果能按端点顺序选择线段就好了,那么怎么办? 跳出题意的限制,转化思维,我们可以把问题改成直接在 $\log V$ 层里面选择啊!这样就不需要按照层顺序了...吗? 考虑状压,设 $R_i$ 表示选择层的状态是 $i$,覆盖的最远右端点,$L_i$ 同理,是左端点。这样就可以按端点顺序了。 最后怎么统计一个点的答案?直接枚举第一层会出事情...复杂度会变成 $O(nV)$? 这里又有一个神奇的观察:第一层线段如果 $>\log_2 V$,就无解。正确性是显然的,因为第一层最大。 所以暴力做就可以了,时间复杂度 $O(n\log V)$。 ------------ 总结: 思维还是不够开阔啊...如果能及时跳出题意的限制,想到怎么样好做就可以了... 思维要开阔!敢想敢转化题意!挖掘题目的限制! **一些关于无解的必要条件也是很有用的!也许可以成为优化复杂度的利器!**(后面 AGC 005E 就出现了...) ## AGC 001F 看到了完全不一样的题解,我惊了,~~感谢 yhx 救我一命!×5~~ 首先这个太抽象了,转化为逆排列,问题变成每次可以把相邻的两个差值 $\geq K$ 的数交换。 (我连第一步都没想到???) 可以发现,接下来就和 AGC 010E 几乎一致了。~~(其实是之前我是在看 yhx 博客的时候发现的)~~ 如果两个数之差小于 $K$ 那么永远无法换位,直接连一条边即可。 怎么使拓扑序逆排列字典序最小?这就是经典的 HNOI 菜肴制作,使得反拓扑序字典序最大即可。 最后是优化连边,直接**贪心**连最右边满足条件的即可,这个直接线段树维护出来,最后用堆跑拓扑排序,时间复杂度 $O(n\log n )$。 ------------ 总结: 排列限制错综复杂,如果同时对应了下标和权值,不妨考虑逆排列? 相邻交换,限制连边! 贪心优化建图!不一定要无脑数据结构,可以找性质贪心。 看 yhx 题解学到了一个字典拓扑原理: > 对于任意一张 DAG 和其拓扑序 $p$,则 $p$ 是字典序最大的,当且仅当 $p^{-1}$ 是字典序最大的。 > 对于任意一张 DAG 和其拓扑序 $p$,则 $p$ 是字典序最小的,当且仅当 $\text{rev}(p^{-1})$ 是字典序最大的。 > 对于任意一张 DAG 和其拓扑序 $p$,则 $\text{rev}(p)$ 是字典序最大的,当且仅当 $p^{-1}$ 是字典序最小的。 > 对于任意一张 DAG 和其拓扑序 $p$,则 $\text{rev}(p)$ 是字典序最小的,当且仅当 $\text{rev}(p^{-1})$ 是字典序最小的。 证明待补。咕咕咕 ## AGC 016E 一直在最小生成树的路上越走越偏,感觉极其复杂,一开题解感觉标算的做法好厉害,再看到小粉兔的做法我就感觉自己是个 sb... 首先肯定是考虑一只鸡会不会死,然后我这都不会...我想了一通奇怪的东西,比如相邻的什么最小...然后走远了。 我们想知道一个鸡能不能活,从图论的角度入手,就是一堆限制问能不能满足。接下来处理限制有两条路: #### 小粉兔做法: 我的 2-SAT 没学到家啊 /px ,这都没想到... 活和不活是 2 元选择,考虑 2-SAT。 先**按照时间拆点**,拆成 $n+m$ 个二元组表示这个时刻第 $i$ 只鸡有没有选择活下来。接下来找性质呗:对于当前的边 $(x,y)$: - 如果 $y$ 之前选择死掉,那么 $y$ 现在必死。 - 如果 $y$ 之前选择死掉,那么 $x$ 现在必死。 - 如果 $y$ 现在选择活下来,那么 $y$ 之前一定活下来。 - 如果 $y$ 现在选择活下来,那么 $x$ 之前一定活下来。 - 如果 $y$ 现在选择活下来,那么 $x$ 现在必死。 这是关于 $y$ 的,$x$ 就不赘述了。 接下来得到了一张缩点后的 DAG,点对满足条件就成了 DAG 上的可达性问题,使用 bitset 可以做到 $O(\frac{ (n+m)n}{\omega})$。 #### 题解做法: 很妙啊,虽然复杂度不如上面的优秀。 考虑 dp 处理限制,设 $f_{i,j}$ 表示:如果 $i$ 最后活下来,$j$ 有没有被杀掉拿去替死。如果转移呢? 首先明确一个事实:留着一只鸡以后杀是为了在我们需要保留的鸡 $i$ 要被杀的时候拿去替死。 发现性质:对于一条边 $(x,y)$ ,假设 $x$ 以后要拿来替死,那么 $y$ 一定要死。 这个"**以后**"提示我们要**时光倒流**。倒着加入每一条边,考虑这样的转移: - 如果 $f_{i,x}$ 和 $f_{i,y}$ 都要替死,那么这条边会打破所有的策略,$i$ 一定会被删掉。 - 如果 $f_{i,x}$ 和 $f_{i,y}$ 有一个替死,那么另一个也要替死。因为那只鸡要保留为了以后拿着替死。 - 如果 $f_{i,x}$ 和 $f_{i,y}$ 都不用替死,那么无所谓。 这样就满足了这个性质,而且仔细观察这是唯一的性质。 得到了数组以后,如果 $i,j$ 都可以活着,它们一定能同时活着吗?显然不是,如果两个鸡替死集合有交就不行,所以判一下两个 $f$ 集合有没有交即可。 为什么是对的?我的证明(口胡):显然这个替死形成了一棵树的结构,如果有交集一定是一条链,两棵树出现分歧的地方就不能同时满足。 可以用 bitset 做到 $O(nm+\frac{n^2}{\omega})$。 ------------ 总结: 不要吊死在一棵树上...换思路... 限制选择可以建图,用 2-SAT 考虑是活是死!2-SAT 是处理二元选择的利器! 限制可以暴力动态规划!观察性质,再满足这个性质!这个性质是替死限制树,那么就 dp 出这个即可... ## AGC 016F 一直在想状压 SG 函数,然后自闭了。这题好妙啊。 首先,两个石子好像是互不影响的,这提示我们算出 SG 函数相同的方案。接下来怎么做呢? 这个导出子图 dp 肯定要状压,但是怎么 dp 呢?如何更新?然后我就不会了。 老样子,考虑**如何割子问题**。抓特殊的部分看看? 如果我们知道了必败点,那么这个图是怎样的? - 所有必胜点都一定要连向至少一个必败点。 - 所有必败点之间不互相连边。 这两个限制。如果把这个一些必败点去掉呢? 神奇的事情出现了:SG 函数为 $1$ 的变成了 必败点! 这是什么,分割子问题出现了!做完了? 是的,做完了,每一次分割的时候满足 $1,2$ 在一起,就可以 dp 了。具体转移就不说了,时间复杂度 $O(3^nm)$。 ------------ 总结: - 通法:分割子问题,分割子问题!如何分割?抓特殊!抓已知!这题的已知是必败态! - SG 函数 dp:SG 函数本身就是一个分层图的形式,对分层图的 **“层”** 进行分割!这种思想一定要有!博弈论 SG 函数可以通过扒必败态来分割子问题! ## AGC 005E 这都不会,可能要退役了。深入思考不够啊...怎么就直接打开题解了?~~sb HorizonWind。~~ 先考虑无解,发现就是如果 A 树有边,在 B 树上距离大于等于 3,先手就可以到这条边去溜后手达到 $\infty$,前提是能到达。然后我就不会了。 不妨设无解的点为关键点,假如先手到达不了关键点,怎么算最大距离呢? #### 一个非常重要的事情:无解已经不可能了,因此先手不可能一次在 B 树走大于 2 步! 假设后手在 Y,先手在 X,那么先手不可能跑到 Y 的后方!(就是子树外)!不然先手随便搞搞就被抓住了(最多走 2 步)。 那么后手层层逼近下来,先手可以走到以 Y 为根 最深的且先手能比后手先到 的点,然后乖乖等死即可,这样就最大了。 ------------ 总结: 要善于简化问题:在排除无解的过程中,注意性质!这个不能一次走 2 步的性质至关重要! 好多题都是这样,通过一步一步的转化与排除,可以得到很多新的有妙用的性质! ## AGC 006F 画了一个直线 $y=x$ 然后自闭了,事实上我第一步都没想到 /px,甚至第二步也及其神仙 ~~(但我之前不是秒过一道二分图的题吗,这次三分图怎么这么难?)~~。 首先这条件太阴间了,**考虑建行列图**!!! 这也太妙了,每个点当成一条边,这就变成了一个图论题啊!如果 $x\rightarrow y,y\rightarrow z$,那么 $z\rightarrow x$,求最后有多少条边? 太妙了,真的太妙了。 接下来是一个可以手玩出的结论:$3$ 染色,考虑每一个弱连通分量: 如果 $3$ 染色失败,那么贡献是连通分量大小的平方。 如果成功,而且用了 $3$ 种颜色,那么贡献是 $rb+bg+gr$。 如果成功但是没有用满 $3$ 种颜色,那么贡献是边数。 和 AGC 011C 的结论蛮像的,就是出现一个非 $3$ 倍数环,就可以利用这个东西无限扩张。 ------------ 总结: 这种转行列图的转化一定要看出来啊... 充分手玩,玩出 $3$ 分图的那个性质! ## AGC 017C 咕咕咕 居然是 BJOI 删数的弱化版... ???这个转化我这辈子想得出来??? ## AGC 020F 咕咕咕 神奇的实数离散化...被难度值劝退了,全场无人 AC... 写这个题的时候头昏眼花浑身难受,可能已经撑不下去了? ## AGC 022F 咕咕咕 网上的做法好像是奇怪的方法? 这个 F 题难度值看着太吓唬人了,瞎 jb 想了一下感觉是一个虚实链剖分就看题解了,打开以后发现网上的做法很奇怪?又看了一眼 LH 的题解发现自己的第一步和他一样...仔细想了快 1 个小时就想出来了,后悔...早知道就不看了,太不够自信,这种题我应该是能想出来的啊... ~~网上的做法待补。~~ 首先按照 AGC 009E 的套路,把合并关系看成一棵树。 ## AGC 015E 搞了 1 个半小时假做法,自闭了。 我的想法:考虑分割子问题,每次看速度最慢的,如果不染色说明速度比他快的且在他前面的染了色,如果染色速度比他慢的全部可以变成黑色,发现这样 dp 状态数爆炸,因为还有欠下黑色的操作...我自闭了。 ~~其实我都已经想到对速度排序了,可惜方向偏了,血亏。~~ 正解居然是直接下手。考虑一个点被染色以后的影响: - 在他前面比它快的:可以超过他然后获得黑色影响后面的。 - 在他后面比它慢的:会被他超过然后获得黑色影响前面的。 但是还有一些点获得黑色以后可以影响其他点!比如速度快的超越前面的所有点...怎么处理?我们考虑搞出“**最强点**”,意思就是左边速度最大的,右边速度最小的,然后观察这些最强点可以得到一个结论: 右边速度比左最强点小的都会被染色,左边速度比右最强点大的都会被染色。 #### 重要性质:速度在左右最强点之间的都会被染色! 接下来自然地就会想到一个转化:按照速度从小到大排序,那么染色的是一个区间。 - 左边是 速度最小的 在它右边的点。 - 右边是 速度最大的 在它左边的点。 所以问题就变成线段覆盖了,直接线段树优化 dp 即可,时间复杂度 $O(n\log n)$。但是这题线段满足亮亮不相交,直接前缀和也行。 ------------ 总结: #### 想清楚再写... 一条思路死了换一条啊啊啊啊 要善于观察发现美妙的性质。 可以多多转化,比如 yhx 就是画了一个坐标图...如果转化到了最后一步(区间覆盖)就要灵敏地想到 dp 啊! 思路是多元化的,可以直接做也可以巧妙转化...这题直接看最小值(整体地)反而还出问题了,还不如直观感受一个点被染色后的影响(局部地)。~~所以还是要靠灵感啊...~~ 还有一个错误的思路可能会对正解有一定的启示... ## AGC 024E 想了 40 分钟还不会,我好菜。 我是从小到大做的,搞了一堆奇怪的 dp 发现不行...去重我会但是不会找共性...想了各种方向又感觉不太可能... 这道神题充分说明了如果找不到共性怎么做?接下来我要扯一大堆了... ~~网上一堆傻逼题解去死吧,妈的智障。~~ #### 直接做会有什么问题? 插入一个段需要满足这一段 $>$ 下一段,这个不好处理。 还要记录一个点可以扩大多少,这没法做。 #### 简化问题 先考虑去重,每一次我们可以考虑插入一个数到一个连续段的末尾,简化后的问题是: > 每一次可以插入一个数到末尾或者小于它的数后面。 ~~没有确定这一步就自闭了,这样转化就清晰多了。~~ 接下来怎么做? #### 做法 $1$: ~~结合各家之长自己摸出来的做法~~ 思想:枚举特殊的分割子问题(可惜这真的不好看出) 枚举插入末尾的有多少个,然后枚举划分,分割子问题,每一段又分别是子问题...然后不能小,所以设 $f_{i,j}$ 表示长度为 $i$,最大值为 $j$ 的方案数。 但是插入顺序在不同子问题里可以不同,所以需要组合数转移($\text{EGF}$) 接下来是一个类似于多项式 exp 的过程,可惜这题模数不是质数,所以只能暴力背包了。 时间复杂度 $O(n^2k)$。 #### 做法 $1$ 的另一个切入口 来自官方题解。 思想:转化成具象的树,打破位置连续的 dp 限制。 插入变成连边,然后变成了树计数,枚举根节点分割子问题即可。时间复杂度也是一样的。 #### 做法 $2$: ~~其实我都想到了这个方向但是感觉不可能,这次是深度不够...~~ 来自毕克。 咕咕咕 ------------ 总结: 居然暴露出了这么多问题,看来我的水平真的还不够啊... - 简化问题:在思考和排除的过程中,多多注意挖掘出清晰明了的具体的模型和性质! - 分割子问题:从末状态,初始状态下手分割,注重初始确定的部分(如这次末尾的 0)。(AGC 035D 也是一个分割子问题的好题) - 转图:将插入的大小偏序关系拉出来连边!这次是通过观察得出“堆”,接下来就便于分割子问题。 - 从小到大放:跳出题意的约束,从小到大,发现特殊性质(都能插入),再找出反悔的方式(一层一层做!)。 ## AGC 038F 咕咕咕 毫无思路,一看题解最小割...发现自己最小割模型网课看过现在又忘了...复习一下。 [最小割总结来了!](https://www.luogu.com.cn/blog/Noziro/zui-xiao-ge-mu-xing-zong-jie) 神仙题...第一步都没想到 ~~(其实是没仔细想?)~~ 的我宛如智障... ## AGC 027F 神仙题,但我又 tm 第一步没想到,我最近怎么了... 无根树关系错综复杂,我直接弃疗了。 题解很神仙:无根树做不了怎么办?转有根树啊! 假设 $x$ 不操作,我们就可以以 $x$ 为根。 接下来 $x$ 显然不会动,那么成功搞出了问题的落脚点!有点不动就可以快乐切入问题了。 接下来就可以套路地观察限制了: 注意到:只要 $x$ 到了 $y$,那么 $x,y$ 都不能动了,因为一个不是叶子,一个已经被操作过。 又注意到:因为根已经固定,所以两棵树同构当且仅当 A 树上每个点的父亲与 B 树的相同。 那么假设 $x$ 在 A 上的父亲是 $y$,在 B 上的是 $z$(根都固定了),我们需要把 $x$ 从 $y$ 搞到 $z$。限制是什么? - $z$ 要先操作到正确位置。 - $y$ 要等 $x$ 操作完才能动。 - $x$ 不操作,$y$ 也不能操作。 限制错综复杂,怎么办?连边!先把第三种情况的无解判掉,然后连边 $z\rightarrow x\rightarrow y$,拓扑排序判环即可。和树上的数好像啊... 最后一个问题:如果所有的数都动怎么办?怎么搞出有根树?暴力枚举第一次操作即可。时间复杂度 $O(Tn^3)$。为什么我总感觉可以优化啊...但我不会。 ------------ 总结: $n$ 很小是突破口!无根树不好做转有根树!不好做就转化!想方设法也要转化! 转化后仔细观察性质,发现限制,然后限制错综复杂就连边! 这种先后选择限制一定要注意拓扑排序啊!限制能多数学化就多数学化! ## AGC 012F 神仙题?想了 10min 就弃了...说真的我好菜啊。 然后题解啃了很久才啃出一点名堂来...看来又要扯了... 先对 $a$ 从小到大排个序。 直接做又出事了,考虑如何计数那个 $b$ 数组。 有一个很好的思想就是考虑什么样的 $b$ 数组是合法的。 首先从后向前看,第 $b_i$ 数的取值范围是限定的:$[a_i,a_{2n-i}]$,这个还是可以看出来的。 然后发现一个不显然的性质:不存在 $i<j$,使得 $b_i$ 介于 $b_j

b_{j+1} 之间 (不含端点)。也就是说这个中位数不能跳,要一步一步地走。

证明这是充要的?可以归纳法吧。

接下来问题就变成了求解这样的 b 数组个数。

还是很神仙...

观察这个限制 3 如何具象地表示:也就是说原先的 b_i 形成了一堆点,每次只能走到相邻的一段点之间或者走到相邻的 b_i上。问有多少种走法。

正着做搞了半天又假了,因为限制越来越多,无法快速用 dp 记录状态找共性。那怎么办?考虑倒着做。正好限制 2 也是倒着的。

倒着做再转化一下限制 3:如果一次从 i 跳到了 j,那么接下来区间 (i,j) 就不能再走了!

看起来限制更阴间了,事实上,如果当前 i 跳向了左边,那么左边这一段全部不能再走,右边还可以!如果当前 i 跳向了右边,那么右边这一段全部不能再走,左边还可以!那么如果向左可以走到 x 个点,我们可以维护处向左走到哪里,然后中间的全删掉...

每一轮如果数不一样还可能会加入一些新的左右可走的点...但是我们还需要知道多少个可以向左向右多少啊!

不知道就设啊!

分析到这一步,这道题其实已经做完了。转化后的限制变得清晰明了好维护了很多。设 f_{i,l,r} 表示后 i 个,当前可以向左走多少,向右走多少每次枚举向左还是向右,走多少还是不走。如果两边数变了还要更新 l,r

f[n][0][0]=1;
for (int i=n-1;i;i--){
    int xl=(a[i]!=a[i+1]),xr=(a[N-i]!=a[N-i+1]);
    for (int l=0;l<=N;l++){
        for (int r=0;r<=N;r++){
            f[i][l+xl][r+xr]=(f[i][l+xl][r+xr]+f[i+1][l][r])%ljc; 
            for (int k=0;k<l+xl;k++) f[i][k][r+1+xr]=(f[i][k][r+1+xr]+f[i+1][l][r])%ljc; 
            for (int k=0;k<r+xr;k++) f[i][l+1+xl][k]=(f[i][l+1+xl][k]+f[i+1][l][r])%ljc; 
        }
    }
}

时间复杂度 O(n^4)

总结:

仔细思考,不要想错!可以手玩样例!

本质不同方案计数,可以 4 种突破口,已经总结过了,这题就是要考虑好方案的性质是什么,什么样的方案是合法的,能不能搞出充要条件对它计数。

充分手玩,考虑清楚,实在不行也可以打表啊...

普通 dp 很难处理甚至处理不了限制越来越大的情况,遇到这种情况可以考虑换思路或者换角度!这次又是倒着考虑,从已知的 n 放大到初始局面!转化限制,抓住关键信息!

不知道什么可以设出来!不会求就设啊!缺什么也设啊!

说了这么多,下次遇到这题还是一样不会吧...

AGC 039C

为什么我连 C 都不会了...

搞不懂啊,为什么大家都会啊?这个循环节计数不是很难吗...

手玩一下发现是把最低位反转后扔到后面,问题等价于这样操作的最少次数和,然后我就不会了...

如果没有翻转操作,这样扔数的过程你想到了什么?次数如何快速求?循环节!操作次数就是循环节...那么有翻转,我们就可以把串倍长,再把后面的翻转,然后求它的循环节!

现在问题变成了对每一个循环节进行计数。直接计数不好做,考虑容斥,设 f_i 表示循环节为最小循环节为 i 的约数的方案数,最后莫比乌斯反演一下就好了。

接下来怎么求呢?因为这是翻转串,我们考虑如何计数:

不妨设循环节为 i,进行分类讨论:

如果 i|n,也就是循环节没有跨过中间,那么发现无解。

然后就变成了跨过中间的情况,考虑这个循环节被中间分成了两段:pq,那么通过归纳可以得到这个串就是 pqpq...pqp 的形式,而且 q=\text{rev}(q)

所以我们枚举最高位就好了?但是还有位的限制...解决方案是拿最高的 \frac i2 位看是否符合条件,如果不符合减 1,根据数位的性质可以证明正确性。

最后反演一下即可,时间复杂度 O(n\log n)

总结:

循环节没看出来,这真的要好好反思了...

头插入到末尾要看出最小操作次数是循环节!这种恢复的操作次数也许和循环节相关!

循环节计数和莫比乌斯反演经常联系起来!

枚举循环节,通过构造发现循环节的关键性质!

从最高位开始会方便很多!

AGC 034C

我 tm 又 A 不了 C,我是不是可以去死了?

想了不到 25 分钟会了一个做法,大概是这样的:

二分,然后考虑钦定一些科目超过对手,然后把 R 开满,剩下的没超过的把 L 拉到底。问题变成了如何选择 R?发现一个选择 X 一定比多个选择总和为 X 更优,证明可以用反证法。因此就会有 \lfloor\frac {\text{mid}}X\rfloor 个选满,剩下的一个选 1 个不满的即可。先全部强制减去对手的分数就可以避免很多讨论。

(哇,居然想出来了题解的大部分内容呢,太强了!)

然后我按照 L\times b+R\times(X-b) 排序,就是优先选择大的,最后选一个小的,小的再排序选择贡献最大的。结果交上去 tm WA 了...搞了半天还是 WA?对拍了一下还是搞不懂,改了排序方法还 tm WA...耻辱,这么多人 AC 的题,我却只能向题解屈服。

hack 数据:

6 100
75 1 4
51 1 3
76 2 2
55 1 1
91 1 1
41 1 2

事实上前面我的分析都 tm 是对的,问题是可能出现一种情况:

大的科目不选,留着替补,然后把大的让给别的科目???!!!因为可能大的 R 比较小,给后面的自己损失少而且可以赚到更多分...我为什么写前没有意识到这一点啊...

解决方法:你就暴力一点,直接枚举哪个做小的,剩下的直接选最大的不就行了...?时间复杂度 O(n\log n)

总结:

感觉自己贪心确实不太好啊...

找关键性质!这题的性质就是选满的就一个...调整法,反证法,这些都很重要。

想清楚有没有可能出现错误情况再写,不要想当然!现场如果是猜结论,怀疑可能有错误情况,就可以写暴力对拍一下!

能枚举就枚举,不要投机取巧什么的...这题只有一个,直接枚举就好了,思维要跳跃!

来自错误的做法的总结: AGC 018C 的“枚举分割+堆”的贪心不要忘记!这个非常有用!

感觉今天的灵感不太行啊...

AGC 037B

咕咕咕

差点身败名裂...感觉我思维不太活跃了啊...

2 周前看过不会,现在题目看成 \max 白花了 1h30min 后想了 20 分钟终于想出来了...然后我的代码还吊锤别人...思路还清晰一点(看来我不菜?)

居然想到了,灵感还不错!

而且我可以出一道 max 的题目了?爽!

AGC 020E

神题...

没有子集这玩意就是一个裸的区间 dp...有限制呢?

我们考虑暴力,把状态设为 01 串。转移要考虑 s 的一堆 \text{and}

这就是正解,复杂度是对的。是 O(n^4+2^{\frac n8})

主要原因在于那个 \text{and} 上,具体证明其实我也不大会...

证明

总结:

有时候看似指数的 dp 可能状态很小!比如 dp 套 dp 哪些...

如果实在想不出优化了,可以考虑信仰打表!!!

AGC 039E

NOI 前咕到现在的一个题目。

和 AGC 028D 很像的一道题,但是感觉这题难一点...?

疯狂疯狂分割子问题哦...

无从下手,先考虑树是什么样子的。

一定是:

这样是不合法的:

也就是对于一条黑色的边,它把圆分成了 2 块。两块之间的连边一定是不相交的。可以知道这是充要条件。

当然这是要连通的,所以两块之间至少要有一条边。

不妨枚举 1i 相连,接下来就是一个子问题:

两块分别是 [2,i),(i,n-1],分割点为 i,两块之间至少有一条边的方案数。

不妨设 f_{i,j,k} 表示上面这个东西:两块分别是 [i,k),( k,j],分割点为 k 的方案数,接下来 dp 这个东西就好了。怎么做?

分割子问题。显然两块至少一条连边,不妨设这个是 a,b,然后因为这是一棵树,套路地(AGC 028D),我们枚举 a,b 的分界点 c,d (具体意义就是分成的这两块的端点)。接下来就变成了 3 个子问题了。

时间复杂度 O(n^7)。常数极小。

优化到 O(n^5):咕咕咕

总结:

抓住性质,找到条件,使用枚举,善于观察和分割出子问题!

不要被数据范围吓到了,不一定是状压!!!

套路不能忘啊!

AGC 023D

咕咕咕

神仙思维题,感觉自己没想出来还没搞清楚,实在是辣鸡。

AGC 035E

咕咕咕

又是一道 NOI 咕到现在的神题...

AGC 031D

咕咕咕

完全不会群论.jpg,来个学习记录?

下面把置换讲成排列?

定义排列的乘法 (p\cdot q)_i=p_{q_i}

定义排列的逆 p^{-1}_{p_i}=i

有一个关键性质: (p\cdot q)^{-1}=q^{-1}\cdot p^{-1},证明再见。

置换乘法满足结合律不满足交换律,就讲这么多吧。

回归本题:f(p,q)=q\cdot p^{-1},找规律开始!

a_1=p,a_2=q a_3=q\cdot p^{-1} a_4=q\cdot p^{-1}q^{-1} a_5=q\cdot p^{-1}q^{-1}(q\cdot p^{-1})^{-1}=q\cdot p^{-1}q^{-1}p\cdot q^{-1} a_7=q\cdot p^{-1}q^{-1}p\cdot q\cdot p\cdot q^{-1}

找不到规律...但是把 a_7 改一下?

a_7=\color{red}{q\cdot p^{-1}q^{-1}p}\color{black}{\cdot p}\color{blue}{\cdot p^{-1}\cdot q\cdot p\cdot q^{-1}}

看出规律了吗?

a_m=\color{red}{q\cdot p^{-1}q^{-1}p}\color{black}{\cdot a_{m-6}}\color{blue}{\cdot p^{-1}\cdot q\cdot p\cdot q^{-1}}

我也不知道怎么看出来的...表示震惊。接下来快速幂即可!

注意置换快速幂的顺序不要写反...

AGC 039D

什么,我的初中数学还给 wjs 了?

算内心不好算,用一个东西转化成垂心,然后垂心用欧拉线,转化成重心。重心就好算了。

总结:

我能总结出什么...我已经不会 MO 了啊...

就是转化吧,计算几何里面重心最好算。

AGC 003E

咕咕咕

神题,完全不会...

感觉自己根本没有完全理解...所以咕咕咕了。

AGC 019E

现在什么都不会...我觉得我菜死了。

不妨设 a_i=0,b_i=000 类点, a_i=1,b_i=010 点, 其他同理。

经过思考与多方向的切入 (看题解) ,我们先考虑这样一个问题:

假设我们已经确定了 a_ib_i 发生了一次交换,如何求概率呢?

干瞪眼不行,这是限制,连 边!!!!!!

我们得到了一个图,考虑每一个连通块,观察性质:

一个点度数最多为 2 !!!所以每一个块要么是一条链,要么是一个环!!!

链要求 10\rightarrow 11\rightarrow 11\rightarrow ...\rightarrow 11\rightarrow 01

环要求 11\rightarrow 11\rightarrow ...\rightarrow 11

发现这个模型转化越想越对,越想越妙啊!!!!!!但是怎么想出来呢...

算概率:

因为操作顺序在连通块之间是随意的,那么套个 EGF,接下来想怎么做就怎么做了,用多项式快速幂可以做到 O(k\log k)

总结:

连边妙啊!!!题意复杂还是限制复杂还是转化复杂,连边!连边!连边!!!这题是传递关系连边!

连边后,这题就简单了,所以脑洞要大!!!

AGC 044D

咕咕咕

自闭,以为自己会 O(L\log L),然后发现编辑距离...有坑,然后假了,发现自己甚至不会 O(1) 判断一个前缀有多少个 a /cy

题解有神仙的二分...看不懂,爬。

其实我想到了相对位置,想到了可以通过判断子序列合并,结果只会 O(L^2),忘记了启发式合并???我???

感觉启发式合并好 nb 啊,以前浙大集训遇到过这样的交互,现在又出现了,赶紧要学了。

总结:

咕咕咕

不会做不可怕,以为自己会做才可怕!

AGC 023C

居然切掉了,我也有今天 /cy

一开始觉得是一个 min-max 容斥的 \max 形式,然后只会 O(n^2) dp,状态都是 O(n^2) 的。然而事实上这题不是期望...所以 min-max 容斥还不能做...

本来想直接看题解,然后坚持了一下,逼着自己继续想,换了一个思路,切掉了/cy。果然人就是要逼自己打破思维定式一下...

考虑直接下手,求多少个操作序列是 i 次饱和。直接下手不好做感觉非常复杂,怎么办?

脑子里闪过一个词,容斥。我也不知道我是怎么想到的...

考虑求 f_i 表示至多 i 次饱和的方案数,注意这里就是至多,不是枚举方案数。答案就是:

\sum_{i=1}i(f_i-f_{i-1}) $$f_i=\binom{i-1}{n-i-1}\cdot i!\cdot(n-1-i)!$$ 时间复杂度 $O(n)$。 ------------ 总结: 正难则反的容斥啊!!!恰好不会求就求至少或者至多!$=x$ 不好算算 $\leq x$ !!!基本套路不要忘了! 这种“结束”型的计数题可以这么考虑! ## AGC 013E 我脑残吧...第一反应组合意义,但是感觉直接做更好?然后搞了一个 dp 发现矩阵和 $i$ 有关,就弃疗了,结果忘了一开始想的组合意义???多少次这样了??? #### 失败的 dp: 设 $f_i$ 表示末尾为 $i$,然后转移是 $$f_i=\sum_{j=1}^if_j(i-j)^2$$ 拆掉后维护 $3$ 个值,可惜矩阵与 $i$ 有关。 #### 解法 $1

来自 yhx:

发现问题的关键在于我们不好维护 f_i\cdot i,f_i\cdot i^2

考虑差分降次

f_{i+1}-f_i=\sum_{j=1}^if_j(i+1-j)^2-\sum_{j=1}^{i-1}f_j(i-j)^2 =f_i-\sum_{j=1}^{i-1}f_j[(i+1-j)^2-(i-j)^2] =f_i-\sum_{j=1}^{i-1}f_j[(2i-j+1)] =2 \sum_{j=0}^{i-1} f_j \cdot \left( i - j \right) + \sum_{j=0}^i f_j

拆成这样有什么好处?注意到我们可以直接利用前缀和递推出 \sum_{j=0}^{i-1} f_j \cdot \left( i - j \right)!!!

接下来就可以直接矩阵乘法了。

解法 2

考虑组合意义,就是在每一个空里面放 2 个颜色不一样的球...直接矩阵乘法就没了。

时间复杂度都是 O(\omega^3\log n)...

总结:

别忘了第一反应(灵感)...不要不会就直接爬,再想一下也不是不行...

组合意义可以很好地降次,减轻 dp 的负担!

dp 利用差分降次!矩阵和 i 有关可以试试差分!

## AGC 033E 咕咕咕 ~~又没看清题目,爽!~~ ~~怎么回事,看对了就会了?感觉和 AGC005E 一样都很棒!~~ ## AGC 032E 咕咕咕 调整法神题,这题疯狂调整,属实 nb。~~感谢 yhx 救我一命!× 6~~ ## AGC 030C 咕咕咕 这题感觉神到做了和没做一样,还是什么都不会... # $\color{orangered}\text{ARC}

按照题目编号排列。

ARC 073E

我好像变强了呢。网课时候不会做,果然做 AGC 会提高智商...呸,提高套路?

为什么这么多人过啊,外国人真的贪心魔鬼吧...

首先一个一个袋子选显然死掉了。(为什么我当时没发现???)

那么先全体排序,看看怎么选最优?(AGC 028C 的套路)

我的思路:

发现可以贪心,小的能选就选,如果选到了集合不一样的再看大的,能选就选,不行就小的。这样上下界都固定了,应该最小。但我不太会证明?但是还会出现最大最小一个颜色,这个双指针即可。

然后 UB 了一下就过了?

为什么对呢?口胡一下,第一步能让 B_{\min} 尽可能大,第二步能让 A_{\max} 尽可能小。

总结:

套路!转化题意变成哪些合法哪些小!

手玩样例找突破口!

贪心,分类讨论,不要忘记特殊情况!仔细思考!

ARC 076F

神题,广义 Hall 定理属实 nb,本来还以为这个东西没用...

这东西感觉可以模拟匈牙利,但我不会。

我想到了前缀优化建图...但是过不去...因为这样就不是二分图了...

因为这个图很特殊,考虑用 Hall 定理。设人集合为左部点,那么最大匹配个数等于 n-\max(0,|S|-|T|)

然后这个 |T| 很特殊,是线段交。这就是这题的妙处。

式子化简后是 \max(0,|S|-\min r-\max l-1-m)。先判掉交集为空,这个随便搞,贪心一下发现就直接减。

接下来考虑枚举 r,从大到小枚举,用扫描线维护 l 的答案。贪心一下就是一个区间加+全局最大值,线段树即可。时间复杂度 O(n\log n)

总结:

Hall 定理可以求最大匹配,前提是图很特殊。

化简式子很重要!

切换枚举方式,转成数据结构题。感觉自己扫描线好像不太行啊...就类似于线段树优化 dp,维护一个区间的答案,然后动态更新...这个 \min,\max 的东西扫描线好像很在行啊...得注意一下了。

ARC 081F

咕咕咕

ARC 083E

去年做的,当时不会,感觉质量很高,拿过来补一下。

这是一道贪心和构造结合的好题!

发现这个权值很有性质,如果当前节点颜色确定了,这个子树的一种颜色就已知了。剩下来的颜色有很多种权值和,记录下来?这样就 O(n^3) 了,无法通过。

发现无解显然是子树权值和太大了,当前染什么颜色都会超出 x_i,反而如果小还可以调整上去,因为没有上界

正解已经呼之欲出了。我们设 f_i 表示这个点染了一种颜色,其子树内反色的权值和的最小值。

那么发现对于一个点 u 的一个子节点 v,要么选择和 u 一样的颜色,对根贡献为 a_v,对 f_u 的贡献是f_v。 否则就是 f_v,对 f_u 的贡献是 a_v

所以我们发现我们如果设对根的贡献为费用,对答案贡献为价值,那么我们跑一个最小费用,强制选所有物品的背包 不就好了吗?这道题做完了。时间复杂度 O(n^2)

总结:

好好地挖掘性质啊!思维不能僵化...

贪心和构造结合的思想,一定要有啊...贪心,贪心!

这种二元记录反颜色的思想也很不错。

ARC 084D

以前做的有点记不得了,来补一下。

神仙题啊...注意到数位和以及整除搭不上边,考虑切换思路。

整除等价于模 k0。然后考虑从 1 开始构造那个很大的数,怎么构造?

发现接下来可以跑同余最短路!于是就做出来了!!!

时间复杂度 O(k\log k)

总结:

很多东西搭不上边或者性质很差就不要想!比如异或和数论,还有这个数位以及整除,考试已经被坑过一次了,接下来注意啊!

数位和的构造方式:+1\times 10

有个东西叫做同余最短路!妙啊!

ARC 085E

死磕 dp 然后去世,一看正解“最大权闭合子图”?

注意到性质:

对第二条建图跑最大权闭合子图即可。

总结:

网络流忘了好多啊...

dp 不行不要死磕啊...最优化可以贪心可以 dp 也可以网络流啊!

这个性质其实已经观察出来了,如果对最大权闭合子图模型再熟悉一点就好了...

ARC 087E

我是博弈菜鸡 /kk

首先问题等价于求一棵 trie 树上的所有空子树的 SG 函数异或和,问题变成了求一个深度为 dep 的满二叉树的 SG 函数。

然后我就 nt 了,突然就搞错了问题...

列出方程:

\text{SG}(n)=\mathrm{mex}\left\{ 0, \text{SG}(n - 1), \text{SG}(n - 1) \oplus \text{SG}(n - 2), \text{SG}(n - 1) \oplus \text{SG}(n - 2) \oplus \text{SG}(n - 3), \cdots, \text{SG}(n - 1) \oplus \text{SG}(n - 2) \oplus \cdots \oplus \text{SG}(0) \right\}

这就是一层层扒链的过程。不要转化错啊!!!

打表发现就是 \text{lowbit}。证明需要格雷码,咕咕咕。

证明,格雷码。

总结:

都想到最后一步了,你在干什么...不要把模型转化错啊!

把前缀看成 Trie 树!使用 SG 函数分割问题!打表找规律!灵感妙啊!

ARC 091F

我是博弈菜鸡 /kk

把 SG 函数拿出去打表,发现:

\operatorname{SG}(n) = \begin{cases} 0 & 0 \le n < k \\ \frac{n}{k} & n \bmod k = 0 \\ \displaystyle \operatorname{SG} \!\left(n - \!\left\lfloor \frac{n}{k} \right\rfloor\! - 1 \right) & n \bmod k !\neq 0 \end{cases}

这个规律怎么找出来的啊,真的强?

如果暴力求,显然 k 大就会 TLE,怎么办?

发现如果一次减去好几次 \lfloor \frac{n}{k} \rfloor 直到 \lfloor \frac{n}{k} \rfloor 发生改变是不是就可以了?这个减多少次显然可以利用整除分块的那套理论算?

那么这样复杂度是多少?因为一次 \lfloor \frac{n}{k} \rfloor 至少减去 1 ,那么...会减去多少次?还是不会算...

有个神秘的东西叫做根号分治 !!!!!!

考虑上面直接暴力做的复杂度,如果 \sqrt n\geq k 那么复杂度是 O(\sqrt n),否则,\lfloor \frac{n}{k} \rfloor \leq \sqrt n,一次 \lfloor \frac{n}{k} \rfloor 至少减一,复杂度也是 O(\sqrt n),做完了。

总结:

博弈论 SG 函数能分析就分析,不然,找规律!!!

关于整除的根号性质要有所注意了!其实前面那个暴力部分你就应该要看出来...(然而事实上你直接写后面那个东西复杂度就对了,所以可以大胆一点不要证明)

ARC 093E

刚睡醒看了 10 分钟直接看题解了...

做题前能不能带个脑子来...这种基础套路题能不能想完所有套路再爬?思维定式怎么还是破不了???再给我 20 分钟冷静我还想不出来???

不要一直想奇怪的东西...不要思维定式...换思路...

首先求出一个最小生成树 T,设边权和为 y,那么 x<y 无解。

接下来要分类讨论了:

假设这棵树上已经有黑白两色了,我们就不用多心了,直接把这部分的贡献加上即可。

接下来不妨设全染白色,黑色乘个 2 就行。

我们考虑维护最小生成树的断边操作:删去一条再加入一条得到的树等价。

所以我们找出这些满足 T 上路径边权最小值 =w_i 的边 (a_i,b_i,w_i),设有 p 条,然后就可以算答案了。

情况开始复杂了。因为这棵生成树还需要满足异色。

仍然套用上述做法,先强制把 T 所有树边都染掉。

有一个结论,就是这棵树黑色边只有一条。可以手玩证明。

接下来考虑每一条非树边:

如果加入这条边对使生成树答案小于 y,那么这个边必须染白。

否则如果等于 y,可以任意染,但一定要有一个是黑的。

剩下的那些边想怎么染就怎么染。这样这题就做完了。

时间复杂度 O((m+n)\log n)

总结:

不要神游啊!不要死磕一个方法...

最小生成树有好多突破口,比如加入边权连通性不变...删除一条加入另一条...

这次选用的是后者,也有可能是前者的(比如 CF Abandoning 那题,又是这个...)

仔细思考,冷静计数!!!

ARC 093F

很早以前看过的题目,被提前剧透了是容斥,就没意思了...

先容斥,钦定打破集合 i ,满足其最小值是特殊人。从大到小,设 f_{i,j} 表示集合 i 已经打破,已经考虑插入了 j\sim m 的特殊人,转移即可,时间复杂度 O(nm2^{n})

总结:

看到限制想容斥我就不说了,现在回想起来这题突然感觉有点意思。

为什么我当时可以想到从大到小?虽然灵感是迸发出来的,但是细思极恐,如果这种题第一反应是从小到大,然后搞了半天发现做不了,换掉了思路,怎么办?

这种限制条件是关于 \max,\min 的需要好好注意了啊...从大到小和从小到大,枚举最小值和枚举最大值可能会出现完全不一样的效果啊!!!

然后第二天考试,T1 dp 题,想到正解的大致思路后,我太紧张,nt 搞了从大到小,就暴毙了,各种边界搞死你,真 tm 服气。感觉好几次这样了,考试就突然考到了最近看的或者最近死过的东西,这是好事还是坏事呢?

ARC 096E

脑洞大开但是 sb 的一天,居然切了一道容斥+组合意义???不愧是我...

仔细一想发现这题有两个限制:

这就没法 dp 了,那就容斥啊!打破第二个限制,然后问题变成有 i 个出现次数只能是 0 或 1,其他随便。接下来怎么计数?

搞了一堆奇奇怪怪的贝尔数然后发现错了...

我的做法

枚举这 i 个有 j 选了 1 ,选了 1 的又可以随便带上没有限制的 n-i 个。

=\sum_{i=0}^n\binom{n}{i}(-1)^i2^{(2^{n-i})}\sum_{j=0}^{i}\binom{i}{j}\sum_{k=1}^jS_j^k(2^{n-i})^k

注意 j=0 要特判...

这样就 O(n^3) 了。接下来怎么优化?

交换和式:

=\sum_{i=0}^n\binom{n}{i}(-1)^i2^{(2^{n-i})}\sum_{k=1}^n(2^{n-i})^k\sum_{j=k}^{i}\binom{i}{j}S_j^k

对后面的式子使用组合意义,发现就是 i 个球选择 j 个分成 k 组,其实就是一些数可以不选。设 f_{i,k} 表示前 i 个分成 k 组就好了。时间复杂度 O(n^2)

yhx 的做法

...

\sum_{j=k}^{i}\binom{i}{j}S_j^k=S_{j+1}^{k+1}

你说证明?你没发现 f 的方程式和第二类斯特林数完全一致吗...而且考虑加一个垃圾桶组,就是 i 个球分 j+1 组了...不过有个小问题就是垃圾桶可以为空,和斯特林数定义不一致,直接加一个 0 号球就好了...

总结:

容斥!斯特林数!组合意义可以考虑一下优化和式的复杂度!!!

\sum_{j=k}^{i}\binom{i}{j}S_j^k=S_{j+1}^{k+1}

感觉这个恒等式非常不错,仿佛又多积累了一个东西。

这个式子和贝尔数的那个公式有异曲同工之妙(虽然就可以用来推):

B_{n+1}=\sum_{i=0}^n\binom{n}{i}B_i

ARC 099F

听说是神仙字符串哈希,然后看着题不知道怎么字符串哈希,打开题解发现我...

为什么要被别人的话语束缚住啊...无语了,这不是普通哈希吗,和字符串有半毛钱关系...为什么不仔细想一下这题...

考虑如何判等?一个直观的想法就是对生成的序列判等。

一个序列判等...哈希!

考虑如何表示这个序列?我们使用 X 进制哈希,加一就是在当前的位置 +X^{y},唯一就是将 y 进行加减。

这是一个类似多项式的操作,满足各种运算律,考虑前缀和,然后开一个 map 就没了。

总结:

u1s1 感觉自己哈希思想还是不够...

序列判等可以大力哈希!这种序列要想到多项式的各种操作!

ARC 101E

ZJOI 前做的题目。

这题妙啊!dp 不能做,换角度用容斥打破复杂度,然后把容斥系数融合在方程里面,就成功优化了复杂度。

具体转移的时候和 CTS 2019 氪金手游 一样,把容斥系数扔到方程里,时间复杂度是 O(n^2)

总结:

有限制就可以容斥,但也不要过分依赖容斥。

直接 dp 复杂度不对如果优化死也想不出来就可以换思路了。而在计数题里容斥是一个更好的选择。

ARC 101F

居然切掉了,感觉自己的脑子还是可以的?舒服了。

我的思路比大家都顺?写一下以免下次想不出来了。

首先我们发现一个机器人只可能在两个出口出去,而且这两个出口分别是左右最近的出口。把操作看成指针,设二元组 (L,R) 表示最大向左了 L,向右了 R 。那么设一个机器人的二元组为 (l_i,r_i),一个机器人从左出当且仅当 L 先到 l_i

用 AGC 019D 的套路,转为二维平面,问题变成了二维平面可以向上向右的一条路径,碰到一个矩形边界就在数组上打上标记(是左还是右)。这还是不太好做,思考大概 15 分钟后发现直接 dp 的话,不仅复杂度会炸而且还会算重,怎么办?

换思路继续转化。观察发现这很像 2-SAT 里的二元选择,于是考虑限制,建图。矩形太抽象了,直接换成点。发现如果第 i 个点选择了右边界,那么其左上角的所有点都选择了右边界,同理如果是选择了上边界,其右下角所有点都选择了左边界。这样我们可以建图,然后问题等价于一个拓扑图黑白染色满足一条链均为 BBB...WWW 的方案数,发现问题好像变成了拓扑序计数,更不可做了?

然后就不想想了,打开小粉兔的做题记录发现他自己做出来了,感到震惊,思考的动力马上来了。

再换思路,灵光一闪后发现我们可以暴力枚举上述的染色方案中所有链的 “BW” 分割点。?做完了?这其实就是单调栈后...矩形...没覆盖的点...?二维偏序序列计数...!

树状数组即可,注意细节很多,时间复杂度 O(n\log n)

总结:

敢于换思路你一定能行! 一定要打破那种安逸感,一定要想啊!

信息转二维平面,限制转图论,枚举关键信息,方案转路径...这些思想一个都不能忘!

有时候要把东西放大,转成广义的问题去做;但有时候不要忘记特殊性质,放大了还不一定能做了。(拓扑序)

小粉兔的题解里出现了新的思路:大力 dp 发现看起来错的是对的...下一次也可以试一下。

ARC 103F

没看到那个互不相等还想到网络流去了...

一道不错的构造题,但是感觉偏简单了,直接对于每条边算一下贡献,从叶子开始向上推进,用并查集合并即可。

总结:

仔细看题目啊!

树上问题,从根节点到子树推,也可以从叶子到根节点推。

ARC 104D

感觉还可以的 dp 题。前期和 dzw 神游了 10 分钟,然后花了 15 分钟想出来了。

枚举 x,然后分数规划,变成方程 \sum(i-x)c_i=0 的解数。

这不好做,考虑正负分开,枚举,然后合并(老套路了)。

这样状态数是 n^2k,利用前缀和优化,dp 复杂度可以做到 O(n^3k)。后面枚举也是 O(n^3k),所以时间复杂度就是 O(n^3k)

总结:

这种问题拆开算然后合并是套路了!以前总结里也有写,AGC 041D 也是...

然后前缀和优化不能忘啊...

不要神游,找突破口!

ARC 104F

感觉比 D 还水...主要是太套路了,然后赛后秒切了。

考虑最大值分治,然后利用贪心优化直接选最大就做好了。

时间复杂度懒得算,反正能过。

总结:

和最值相关就要想最值分治...

计数和贪心结合的思想说真的我也是第一次发现。就是要不重不漏就贪心枚举。

ARC 105F

这场是真的思维场...这题比较套路我不会,D、E 两个思维题都被我做出来了...就记录一下这题吧。

首先题目那个条件显然是二分图。接下来考虑如何计数。

这个连通图比较烦,考虑套路正难则反,枚举 1 的连通块,但是还需要 dp 出二分图总个数。这怎么 dp?

直接枚举左部点显然会算重...怎么办?

这是一个套路:二分图先算连通块。

为啥?因为连通二分图黑白染色只有 2 种方案。

考虑我们的第一反应:直接枚举左部点我们算重了多少次?

是染色方案次。

那我们直接 dp 出总染色方案,然后把算连通二分图个数改成算连通二分图总染色次数好不好啊?

发现做完了!最后算出来除以 2 就是答案!

总结:

正难则反不能忘...

二分图计数转染色方案!连通的二分图只有 2 种,而且总的很好算。

ps:那么我们怎么计算总的二分图个数?可以通过连通的算回去。

这个故事告诉我们,有时候连通还比总的好算,不能思维定式

ARC 106E

怎么对中国选手这么友好啊...出板子题看谁手速快吗...为什么我看了 5 分钟才看出来...

发现这是一个二分图匹配问题。外层先套个二分,内层求个匹配,看是不是完备即可。

这是一个奇怪的连边,而且很有规律可言。因为 k 很小,考虑使用 Hall 定理,然后套一个 FWT 就好了。

总结:

很有规律可言的连边可以使用 Hall 定理判断匹配是否完备!

ARC 106F

怎么对中国选手这么友好啊...出板子题看谁手速快吗...ARC 真的越出越简单...

复习一下 prufer 序列也挺不错的

直接上生成函数:

=(n-2)!\prod_i\sum_{j=1}^{\infty}\frac {A_{d_i}^{j}x^{j-1}}{(j-1)!}\ [x^{n-2}]

不写 \text{EGF}

=(n-2)!\prod_i\sum_{j=1}^{\infty}\frac {d_i!}{(j-1)!(d_i-j)!}x^{j-1}\ [x^{n-2}] =(n-2)!\prod_i\sum_{j=1}^{\infty}\frac {(d_i-1)!d_i}{(j-1)!(d_i-j)!}x^{j-1}\ [x^{n-2}] =(n-2)!\prod_i\sum_{j=1}^{\infty} d_i\binom{d_i-1}{j-1}x^{j-1}\ [x^{n-2}] =(\prod_i d_i)(n-2)!\prod_i(x+1)^{d_i-1}\ [x^{n-2}] =(\prod_i d_i)(n-2)!\cdot(x+1)^{\sum d_i-n}\ [x^{n-2}]

后面那个就是

=(\prod_i d_i)(n-2)!\cdot\binom{\sum d_i-n}{n-2}

时间复杂度 O(n)

总结:

水水水

prufer 序列不能忘!组合排列搞清楚!生成函数很重要!

\color{orange}\text{Codeforces}

CF 506E

牛逼,这题现在想到了 dp 了,比当时强了?

首先 dp 状态数是 O(|S|^2) 的,好像还无法直接压缩自动机呢!

然后自动机不会优化,看题解发现可以考虑路径。

那么挖掘性质,发现 25 点和 24 点的 2 倍的和是固定的!

那么统计 24 点的个数然后单个算即可。但是这好像单个计算也只能做到 O(|S|^4\log|S|)

然后转化完又可以转化优化自动机状态了!!!拉出一堆链拼起来状态数就只有 O(|S|) 了。

总结:

通过路径和性质来压缩自动机!

这种 dp 转路径的题已经遇到好几次了啊...敲响警钟!

独立思考引出了一个恶心的问题:组合意义?

组合意义很强,...浪费时间...然后可以生成函数...基础不扎实我爬。

CF 547D

不会,丢人。

nb 数学竞赛题。首先点→行列选择一个贡献→二分图。!!!

不能忘记网格图和行列点有关可以建一个二分图

然后利用构造的二分图 2 染色使得每个点的两种边个数绝对值相差 \leq1

这个就很仙:点奇偶性 → 欧拉回路,二分图欧拉回路是左 → 右 → 左...

欧拉回路可以抵消边。然后可以给奇点加辅助边,就可以了。

怎么现在脑子还不如当年 9 月?

总结:

行列二分图!

度数奇偶性,欧拉回路!

这种构造太妙了。

CF 578E

不会。

又是一个最优化+构造的脑洞大开题啊!

显然可以发现,如果前面有一段 \text{L...L} ,后面有一段 \text{R...R},那么我们可以拼凑成 \text{L...LR...R}!!!

发现了什么?是 \text{LRLR}... 的最小划分!这个最小划分显然可以 O(n) 或者 O(n\log n) 求。

但是一个划分一定可以出答案吗?

构造!

但是 \text{LR,RL} 怎么办?做法假了?没有!拆掉!\text{LR,RL}\rightarrow\text{LRL,R}。做完了!!!

细节太多了,爆了一万发 OJ,丢人。

写了一遍,自闭了。

总结:

先找到一个下界再证明是一个解贪心题的好方法...

然后这个下界的答案还可以和构造一起配合!

如果有反例,不要悲伤不要心急,转化一下也许就不是反例了。

CF 575I

咕咕咕

CF 587E

咕咕咕

CF 587F

咕咕咕

CF 605E

我没有脑子 /ll,我连普及选手都打不过了 /dk

思维定式害死我,唉。

图的 dp 非常不好搞,先考虑策略。设 f_i 表示 i 走到 n 的期望。

性质:i 不可能走到 j 满足 f_i<f_j

因为这个东西是期望,已经平均过了!!!这样还不如待着不动。这个性质看起来非常傻逼,但是非常有用。这样就可以排除很多让你神游的情况。

假设所有点的期望大小排序后是 i_1,i_2,...,i_n,那么 f_i 满足什么?根据上面那个性质:

f_{i_x}=\sum_{j=1}^x[\prod_{k=1}^{j-1}(1-p_{i_x,i_k})]p_{i_x,i_j}f_{i_j}

可以直接做了?我们还无法确定 i 数组啊!怎么办?

冷静一下就可以发现可以从终点开始反推出 i_x 数组。每次找最小的,用 dijkstra 那套理论可以发现,这就是是每次找最小的,然后确定下来它的位置。因为这是 dijkstra 所以这就是对的。

时间复杂度 O(n^2)

总结:

期望已经平均过了,是可以相互迭代的啊!多发现性质,少神游。

从终点开始反推!

用 dijkstra 的贪心思想来确定需要的序列!这本质其实也是一个动态的最短路!(扩展 dijkstra?咕咕咕了)

CF 1137E

补档...

发掘性质,一次插入只有最前面的 0 有用?

而且最后一个操作很明显提示了是凸包。所以我们维护一个凸包然后单次查询就完事了...

具体的,前端插入一个 0 我们就删完,后端插入就通过全局标记处理,每一次查询的时候,如果凸包“上翘了”就弹出。时间复杂度 O(n)

总结:

那个凸包的形式不能忘了,好多数据结构题都是这个形式。接下来就是弹栈,具体问题具体分析即可。

CF 1137F

补档...拉一波当时的题解:

LCT 神题,和 \texttt{[SDOI2017]树点涂色} 是母子题。

首先最大的一定最后删除,所以我们以最大的点为根。

我们考虑每一个点一定是等子树所有点被删完以后再删除。

所以可以用剖分的方式来表示一段链按照深度在删除序列上连续。

这个可以用一个颜色来表示一条连续链的先后删除顺序。

想到这里就是 LCT 了。但是我还是感到奇怪,是怎么想到的...

其实发掘一下性质,对于一次 up 操作就是换根。怎么搞?

发现更有趣的是,之前的根到新根路径上所有点是一段连续删除段。而且是最后删的!

这不就是 makeroot 吗???神奇啊!!!

其他的删除序列就是这一条链强制最后,其他的能提在就提早,但是和原“颜色”(删除时间戳)有关,这不就是 access 吗...

那么怎么看排名呢?用树状数组记录每一种时间戳有多少个点。

这在 access 切换虚实链时可以直接维护。

时间复杂度 O(n\log^2n)

总结:

事实上这都成一个套路了。对这些“全新的”字眼一定要敏感。

还有一道 JOI 的题目也是 LCT 维护抽象信息,改天去补一下。

upd:补了,比这题水多了。

CF 840E

补档...

咕咕咕

CF 1267G

咕咕咕

CF 1270H

没想到最后一步...一开始想了一个线段树维护单调栈,发现假了。

先分成很多的“块”,块满足这一块的 \min> 下一块的 \max。然后这个怎么维护?线好像不可以直接做。

想到了枚举分界点:找出有多少个点满足前缀 \min> 后缀 \max,好像还是不可以直接做。我的思路到此为止。

如果我们换一个思路,枚举后缀最大值呢?注意到关键性质,所有数互不相同,所以如果枚举了一个出现过的 x 满足:

所有大于它的设为 1,小于的为 0,只有一组相邻的 10

然后就是线段树维护区间最小值了。时间复杂度 O(n\log n),神啊!

总结:

能转化就转化,挖掘特殊性质!

不要拘泥于枚举位置!枚举最大值找到关键计算方法!从前缀最小>后缀最大,转成枚举最大值!!!

果然这种东西就是开我脑洞的,下次做类似的题能不能做出来啊?/kk

CF 1270G

这也太妙了...

这个条件化一下发现就是一个“跳”的形式。如果做过 AGC 008E 对这个就会非常敏感:连边,基环树,可惜我没有。

利用这个“跳基环树”的环即可。时间复杂度 O(n)

总结:

这种跳跳的东西,不妨也连边,建图?迭代出 0 的观察力需要锻炼了...

这个套路很重要了啊!

CF 1404E

咕咕咕

我菜炸了 /kk

这题我已经找到了 3 种方法,除了第三种看不懂,以后再说(

方法 3:来自 dqa2020,居然没有题解,谁看懂了告诉我好吗 /kel

CF 1025F

好妙的题目啊!枚举公切线也太抽象了...

转相交更不可做...还好这个出题人没有来一波正难则反...

不相交利用 NOI 模拟赛自己 yy 的东西,用一条线分开然后计数。这题也是这样,枚举的直线就是题解里说的“公切线”。这样极角排序一下就好了,时间复杂度 O(n^2\log n)

总结:

...不相交,枚举分割线!

CF 1326F

从未见过的全新解法与套路...

首先限制有点恶心,不好做,考虑容斥,打破 i 条边。这最后 IFWTand 一下就出来正确答案了。

容斥完了怎么做?一些段一定要成链,一些段没有限制?如果对于 2^n 的每一种状态都 dp 一下时间复杂度就暴毙了,只能过 F1?

找它的共性:发现打破的限制是 ii+1 的,然后这些东西重排不重排对答案毫无影响。

神仙操作来了:18 的无标号整数拆分很小(大概 385?),直 接 枚 举 即 可。

对于每一种整数拆分我们要快速算出答案。可以先 dp 出一个状态形成一种链的方案数,然后怎么合并?显然可以子集卷积,这样就可以做到做到 O(n^2\cdot2^n\cdot P_n),还是只能过 F1。

观察性质去掉子集卷积:第 i 次子集卷积的多项式只有 |S|=t_i 处有值(t_i 指整数拆分第 i 项)。

然后 \sum t_i=|n| ,所以并的个数为 n 的时候已经满足了不交!直接 or 卷积即可。

然后 or 卷积可以直接预处理拿出来,时间复杂度就变成了 O(2^n\cdot (n+n^2+P_n))。然后就能过了。

总结:

重复了亿遍的有限制想容斥...

全新套路:可以利用整数拆分预处理合并 dp,优化复杂度!枚举子集划分也是,一个拆分数,一个贝尔数。以后对这些要敏感!

还有,子集卷积可以在一些特殊情况下转化成正常的卷积...

CF 1418F

咕咕咕

CF 1261F

咕咕咕

CF 494E

翻硬币结论:只有这个硬币存在的 \text{SG} 的异或和的值是游戏的 \text{SG}

这玩意还能循环利用,真的厉害

打表出一个很 nb 的东西:

\text{SG}(x,y)=\min(\text{lowbit}(x),\text{lowbit}(y),\text{greatbit}(k))

然后是套路了,还是挺不错的。

考虑求每一个 \text{SG} 有多少种。设当前枚举到 2^i,然后直接做不好做,正难则反!矩形缩小后求扫描线面积并即可。时间复杂度 O(n\log ^2 n)

总结:

翻硬币结论要记住!不能忘了,以前做过一遍地。

打表找规律!注意 \text{lowbit} 这个东西非常厉害,下次找规律可以考虑这个玩意。

## CF 1175G 咕咕咕 ## CF 1254D 咕咕咕 ## CF 1205E 洛谷博客太垃圾了,又丢档了,所以咕咕咕了。 ## CF 1365G 咕咕咕 又丢人了,第一步想了好久。以前我爸和我讲过奇怪的老鼠试毒问题,我居然看了 40 分钟才想到二进制分组... 打开题解我发现如果从直接求值得方向还更简单...我是不是思维定式太严重了... ## CF 1149D 这题真的 nb 啊,根本没想到这题的复杂度还是指数级的。 首先利用最小生成树的性质:插入所有 $\leq w$ 的边后连通性唯一。 所以我们先加入小边,原来的图就被分成了好多块。 如果做到枚举“所有的生成树”?观察就可以发现内部可以走随便的边,因为显然不会出现自环——不可能出现非哈密顿路。 外面的也随便走?样例就把你 hack 了,事实上一个小边连通块只能进一次!不然就不是最小生成树了。 那怎么办?这是一个哈密顿路径问题,怎么做到多项式?找性质失败,然后我就不会了。 题解很妙:不要挑战世界难题!!!考虑优化指数!!! 仔细观察就可以发现一个小边连通块如果大小为 $3$,那么一定不会出事,因为内部显然更有优($2a<2b$)。 因此只状压 $\geq 4 $ 的即可。时间复杂度是神仙的 $O(2^{\frac n4}m\log m)$。如果使用双端队列跑最短路可以去掉 $\log$。 ------------ 总结: 最小生成树的性质! 不要想着挑战难题...可以想一下怎么优化状态啊!找性质也要找对方向! 这种题真的不可多得,最近见到好多个 $O(2^{\frac nk})$ 复杂度,不一定要死磕多项式算法! ## CF 986C 这是一道经典题,noip 2018 前我还不会,感觉还不错这题,虽然没有很难想,但是还要想一会儿... 如果直接建虚点可能要搞一个 FWT? 这题的精髓就在于不建出边,连通性就用 dfs 染色。具体就是暴力搜索,如果当前有一个原数组的值就 dfs 它的补集。 这样就可以做到不漏地染色了。时间复杂度 $O(n2^n)$。 ------------ 总结: 不一定要建出边!思路开阔一点! 单纯求连通性可以直接 **dfs** 染色! 不要思维僵化! ## CF 1305G 咕咕咕 打开思路神题...不愧是现场几乎无人 AC 的神题...tourist 也不会... 先想到建虚点(根),接下来就是最小树形图???这东西怎么搞啊???~~不会最小树形图,我觉得接下来应该看一下。~~ 考虑把他转化成我们熟悉的模型。注意到边权和点权有关,考虑性质。仔细观察发现,建完根以后,一个点的贡献 $=$ 度数 $-1$! 这说明了什么?我们可以把又有向图转化成无向图!把边权设为 $a_i+a_j$ 跑最大生成树再减掉所有点的点权各一次就是答案! 问题简单多了,接下来就是怎么求最大生成树? #### 方向 $1$:kruskal。 每一次加入最大的边即可。考虑枚举边权,然后枚举子集,暴力连边即可。时间复杂度 $O(3^n\alpha)$。实测不加按秩合并 tle 了... #### 方向 $2$:Boruvka。 咕咕咕 ------------ 总结: 打破思路!转化成熟悉的模型,观察图的性质,最大树形图转最大生成树! 思维要活跃啊!不要轻易弃疗... 如果卡常不要忘记搞并查集!这东西真的很有用! kruskal 也可以优化最小生成树...其实 prim 也很 nb... ## CF 1192B 咕咕咕 ## CF 1178G 以前不会做,题解都看不太懂...现在在想线段树当堆用,没想到拆绝对值???虽然只想了 3 分钟没什么好说的... 变成区间操作。接下来又是恶心的双数组问题: - 区间对 $a_i$ 加 $x$。 - 区间询问 $\max \{|a_i|\cdot b_i\}$。 把后面绝对值拆掉!!!变成 $2$ 个问题: - 区间对 $a_i$ 加 $x$。 - 区间询问 $\max \{a_i\cdot b_i\}$。 接下来是经典问题... 如果是全局操作,怎么做? 注意到 $b_i$ 都是正数,对于 $b_i$ 排序,设点初始坐标 $(b_i,a_i\cdot b_i)$,然后一次操作相当于每一个点 $(x,y)$ 都加 $x$,询问最大值最小值... 这个都加 $x$ 的操作很有内味啊...凸包!!!所以做一个凸包,然后对于当前多少个 $x$ 就直接在凸包上二分即可。 现在是区间操作,直接块内打标记,块外重构凸包,询问就块内二分块外暴力,时间复杂度 $O(q\sqrt n\log n)$ 。 如果把块内二分改成暴力指针的话,时间复杂度就是 $O(q\sqrt n)$ 。因为加的数都是正数,分析一下发现一次只有 $2$ 块被重构,在重构之前一个块最多跑 $\sqrt n$ 次,所以复杂度是对的。 ------------ 总结: 求绝对值(切比雪夫距离)最大值可以 tm 拆掉... 经典问题搞清楚!全局 $+\ x\times a_i$ 不要忘了凸包!套路做的还是太少啊... 总算搞清楚分块维护修改的本质了!牺牲复杂度完成全局操作!所以以后如果全局好做可以考虑分块? 关于暴力重构的复杂度分析!!! ## CF 1178F 咕咕咕 为什么我当时不敢搞 F2 a1。。。这 F1 F2 有本质的区别吗?~~看来我变强了?~~ ## CF 724E 咕咕咕 ## CF 724F 咕咕咕 ## CF 724G 降智了,一道 ** 题想了 30 分钟...主要是一开始想错了。 首先按照套路直接拉出一个 dfs 树搞出环扔到线性基里。 一开始一直以为直接做就好了,然后拆位考虑,然后发现没看清题... 然后开始疯狂想 trie+线性基,想着枚举 s,后来 tm 发现 s 不可枚举...我...然后意识到可以把一开始假的拆位考虑给拼上去,然后 仔细想一下就做完了? 直接枚举怎么做都出事,按位考虑,然后看看线性基上有没有这位,如果没有就只能路径有,否则可以利用线性基的性质——有这位就可以表示出来。 ~~然后一边想一边搞混搞混,以为是每个路径都要算一次。~~ 这样就没了。~~心态崩了,没时间了,直接抄,爽~~ ------------ 总结: 想清楚这样做会不会出事!怎么枚举不会爆炸!按位考虑的思想一定要有! 异或按位考虑有时候会方便很多!这种求和题按位考虑就很有优势!避免了很多不必要的枚举! 线性基不要忘了... ## CF 938F 咕咕咕 THUWC 前做过,当时还是周老师教我的,现在我居然忘了...啊丢人。 重新看了一遍题解,感觉我当时是 sb? ## CF 1017G 咕咕咕 ## CF 183D 咕咕咕