https://kenkoooo.com/atcoder/#/list/do_while_true?fromDiff=2200&toDiff=3199
abc294h | C
这位真是重量级!感谢 ZCPB 老师教导!
可以用“广义串并联图方法”,即不断删一度点和二度点,来对图进行简化。删完之后一条边有两个权值,分别代表两端颜色相同/不同时这条边对答案乘上的系数。
对于每个连通块单独考虑。如果点数很小,可以直接枚举颜色的最小表示,也就是爆搜一下集合划分。点数很多的话,非树边会比较少,所以就对于每个返祖边的 dep 较小的点组成的集合,搜这个集合里面的点的颜色的最小表示,然后上个暴力树形 dp 算方案数就行。
复杂度不是很会算,但跑得很快!
arc158d | D
这啥???
摸鱼酱一语切中了肯綮!观察到等式左右两侧都是齐次的,那么自然有 .
假设左边为 ,右边为 ,,那么 ,想令 .
对 进行随机,直到 有逆元然后求出 ,并且还要 能求逆元然后求出 ,就可以了。
arc158e | D
分治, 劈成两段 ,计算跨过 中间这条线的最短路。对左侧每个格子 分别表示到达 和 的最短路(不会回头所以直接 dp),右侧也类似处理出 是到 ,然后考虑两个格子 的最短路就是 ,假如是 更优那么就是 ,那就排序,前缀和,二分。
时间复杂度 .
abc293h | D
编一个看起来挺对的 dp:
表示 到子树内的颜色的最大颜色数最小是多少;
表示 子树内染色之后的答案。
然后考虑 的转移是让 和子树中 最大的 染同样颜色。考虑 ...... 这时候发现问题了。
在 的转移中 和 的信息都需要。以为既要对 chkmax,也要对 chkmax.贪心肯定是让两个都尽可能小,但是无法定义它们之间的优先级,究竟优先哪个更小是更优的。这样分开记的话,无法得知究竟应该选哪一对 ,只知道最小的 和最小的 是啥。
一个有点用的观察是直接利用重链剖分构造出答案的上界是 级别的。那么就可以将 其中一维记在下标里,然后值域里面存另一维最小值是多少。
另外一个思路是考虑二分答案,这样只需要保证 满足 即可,然后去 dp ,这样复杂度就是 了。
这个得写下代码才行,青蛙鸽了
arc156d | A
异或有很好的性质,相同直接抵消。那考虑按照将 看成多重集来划分等价类,仅大小为奇数的等价类贡献答案。考虑这个多重集的形态,假设下标 出现了 次,那么总的出现次数就是:(多重集的排列数)
欲求其出现次数奇偶性,考察其 的次幂是否为 ,仿照 Kummer 定理,容易猜出 的次幂为 在二进制下的进位次数,而证明与 Kummer 定理证明几乎一致故略去。那么现在 为奇数当且仅当 两两无交。( Lucas 定理?)
也就是将 二进制分解,每个二进制位分配给一个 ,这样得出来的 才是会给答案产生贡献的。
那么思路就转到在数位上考虑,观察到 都比较小,所以想到设数位 dp 表示从低到高考虑到第 位,总和在第 位这里进的位是 ,所有方案的异或是多少。如果这一位是 1 转移就枚举这个 1 分配给哪个 ,然后为了 能够转移还要记一下模 2 下的方案数 .
注意到 的上界是 ,那么时间复杂度是 .
补一下中间那个证明:
,令 .
.
那么 实际意义为 截取最底 个二进制位之后的值。
实际为所有 仅看除去最底 个二进制位之后的值再求和。
,那么 即为“所有 仅看最底 个二进制位求和后再截掉最底 位”,也就是在第 位进了多少位。
agc061c | C
令 为 的答案。然后考虑能不能转移,现在考虑选 的情况:
对于左端点落在 的区间,枚举这些区间中第一个选 的是哪个区间。如果都选 那么方案数就是 , 是最后一个左端点落在 的区间编号。
如果枚举了第 个区间是第一个选 的,现在有 都选的 , 选的是 ,然后考虑 的选择方案,首先 ,但是需要 是选 的,所以记 为 选右端点时 的方案数。然后发现 中的方案,将 都插到 ranklist 中得到的方案,与计算 且 是第一个选 的方案,是一一对应的
(不能一一对应的话就是对于一个 , 在其中,但是没有其它选了的位置在 中,导致选 还是选 出现了区分。由于题目的特殊性质, 在 中那么 一定也在 中,所以不会出现这种情况)
所以就直接令 转移到 就行。 的转移是几乎一模一样的。
现在考虑 的转移,选 的情况,如果直接算 的话发现会有算重的,而算重的情况就是 选 且 中的区间都选右的情况,这个就是 了。
后缀和优化就能做到 .
abc297h | C
先考虑计数怎么做,容斥一下,钦定若个段内部是相等的。那就 dp,,处理出 使得 ,然后分治 fft 算下就行。
如果要算答案 也一样,,再搞个 就是 ,分治 fft 一起算 和 就行。
时间复杂度 .
arc159c | D
为什么这都想不出来/fn 越来越笨了/fn
考虑操作 次那么总和 变成 ,这个需要是 的倍数,先考虑 是偶数的情况。
现在 是偶数有解当且仅当 是 的倍数。必要显然,充分就开始构造:
首先发现:
第一步:1 2 3 4 5 ... n-1 n;
第二步;n n-1 ... 5 4 3 2 1.
这样子相当于完全没有变化。然后微调一下:
第一步:1 2 3 4 5 ... n-1 n;
第二步;n-1 n ... 5 4 3 2 1.
这样就实现了第一个减去 1,第二个加上 1.那么用这个玩意把所有数都推成平均值即可。
是奇数的话,先随便操作一次,然后变成 是偶数的情况,由于无论第一次怎么操作都不会改变操作后的 sum 具体值,所以随便操作一下然后尝试构造就行。
arc153d | A
套路:考虑第 位是否进位给 ,按照最底下 位从大到小排序,能进位的一定是个前缀。那么数位 dp 只需要记当前考虑了前 位,第 位上有 个进位,就能知道哪些进了位,再考虑这一位填啥就行。
arc139d | A
套路:期望可以拆成 的概率之和,即使是计数问题也一样, 的方案数之和。
然后就考虑 的有多少个的方案数,加起来就是答案,这个统计就很简单了。假如现在有 个 ,那么每轮就有 种方案 ,有 种方案 不变,然后 再和 取 min,按照初始时 与 的大小分类讨论,枚举 次操作中有几次是取到 的值即可统计方案数。
abc309h | D
折线容斥的新思路?!
首先是个格路计数问题,尝试反射容斥无果。
每上一层可以往左走或者中间走或者往右走,看上去就很想让答案多项式去乘一个 ,那需要在模 意义下做,那么现在问题。。。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2022-03-23 「杂谈」原来我不会差分约束
2022-03-23 一些经典小结论