youwiki大佬的博文

根号分治


CF797E Array Queries


我们考虑,按 \(k > \sqrt{n}\)\(k \leq \sqrt{n}\) 分类讨论。

如果 \(k > \sqrt{n}\) , 那么暴力就可以了。

如果 \(k \leq \sqrt{n}\) , 那么可以预处理 \((p, k)\) 状态需要跳的步数。


CF1580C Train Maintenance

\(n\) 种列车,第 \(i\) 种列车每工作 \(x_i\) 天就要维护 \(y_i\) 天。

接下来的 \(m\) 天中,每天有一个操作,分为加入一列车和删除一列车。在车刚加入的那一天,它刚维修完,即加进来的那天可以正常工作。

每一天的操作完成后,你都要回答,当前有多少车在维修?

\(1\le n,m\le 2\times 10^5\)

\(1\le x_i,y_i\le 10^9\)


\(x_i + y_i\) 进行根号分治. 分为两类

1> \(x_i + y_i \leq \sqrt{m}\)

因为 \(x_i + y_i \leq \sqrt{m}\), 所以这样的 \(x_i + y_i\) 最多有 \(\sqrt{m}\) 种 (废话😒) , 然后对于每一个 \(x_k + y_k\) 维护一个线性表 (可以支持 \(O(1)\) 的单点修改和查询) \(a[i][j]\), 用来维护 \(x_k + y_k = i\) 的火车对模 \(i\)\(j\) 的时刻的贡献, 每加入或删除一个火车时可以直接暴力修改,查询时直接暴力统计每个线性表。

2> \(x_i + y_i > \sqrt{m}\)

注意每次询问的时刻是一天一天的递增的, 所以可以用差分。

因为 \(x_i + y_i > \sqrt{m}\) 所以火车维修的时间段数 \(< \sqrt{m}\) , 然后用差分进行修改就行了。


我个人认为在 OI 中,组合计数是最简单、公式化的版块。同时解决计数题也是最有成就感的。

计数的话,除了之前讲过的计数dp, 还要考虑组合意义,推式子,或者直接套用已有的套路来转化原问题。


回顾十二重计数法

寒假集训,我们讲过十二重计数法,那么现在请大家回顾一下
https://www.luogu.com.cn/problem/P5824


回顾一些组合恒等式

\[\binom{n}{m} = \binom{n}{n - m} \]

\[\sum_{i}\binom{n}{i} = 2^n \]

\[\sum_{i=0}^{n}\binom{i}{m} = \binom{n + 1}{m + 1} \]

\[\sum_{i}\binom{n}{i}\binom{m}{k - i} = \binom{n + m}{k} \]

\[(n + 1)\binom{n}{m} = (m + 1)\binom{n + 1}{m + 1} \]


CF932E Team Work

给定 \(n, k\), 求 :

\[\sum_{i=1}^{n}\binom{n}{i}\times i^k \]

\(1 \leq k \leq 5000, 1 \leq n \leq 10^9\)


\[\begin{aligned} &\quad\sum_{i=1}^{n}\tbinom{n}{i}i^k\\ &=\sum_{i=1}^{n}\tbinom{n}{i}\sum_{j=0}^{k}S(k,j) i^{j\downarrow}\\ &=\sum_{j=0}^{k}S(k,j)\sum_{i=1}^{n}\tbinom{n}{i}i^{j\downarrow}\\ &=\sum_{j=0}^{k}S(k,j)\sum_{i=1}^{n}\tbinom{n-k}{i-k}n^{j\downarrow}\\ &=\sum_{j=0}^{k}S(k,j)n^{j\downarrow}\sum_{i=1}^{n}\tbinom{n-k}{i-j}\\ \end{aligned} \]


\[\begin{aligned} &=\sum_{j=0}^{k}S(k,j)n^{k\downarrow}\sum_{i-k=0}^{n-k}\tbinom{n-k}{i-k}\\ &=\sum_{j=0}^{k}S(k,j)n^{k\downarrow}2^{n-k}\\ \end{aligned} \]


CF869C The Intriguing Obsession

齐心协力,我们可以以超乎想象的速度到达任何地方!现在,火炎姐妹 (Fire Sisters) —— 火怜 (Karen) 和月火 (Tsukihi) 正在前往一个她们从未到达的地方——水中的小岛!

有三种不同类型的小岛,方便地,各自涂上了红,蓝,紫三色。每种颜色的小岛各自有 \(a,b,c\) 个。

这些小岛之间初始时互相分离。可以在小岛之间架桥,两个小岛间最多架一座桥。

但要满足:任意两个不同的颜色相同的小岛的最短距离要大于等于 \(3\)(桥的长度为 \(1\))。

火炎姐妹已经准备好迎接未知了,但是她们想测试一下你的勇气。你需要计算出不同的架桥方案有多少种,如果有两个小岛之间造桥的方案变了,我们就说这两个造桥的方案不同。答案对 \(998244353\) 取模。


很简单的一道题。

我先把限制转化一下,其实就是,相同颜色不能有连边,一个岛不能同时与两个颜色相同的岛相连。

这个问题就很好解决了。


考虑分配贡献

给你一个长度为 \(n\) 的序列 \(a\) , 让你求 \(a\) 的所有上升子序列的元素和。

\(1 \leq n \leq 10^5\)


格路计数普及

给你 \(n \times m\) 的网格,你从左下角出发,每次可以向上走,也可以向右走,有一条线为 \(y =x+b\) , 问你有多少种方案不经过这条线走到右上角。


lucas 定理

\[\binom{n}{m} = \binom{n/p}{m/p}\binom{n \% p}{m \% p} \pmod p \]


AT_arc137_d [ARC137D] Prefix XORs

给定一个长度为 \(N\) 的整数序列 \(A=(A_1,A_2,\cdots,A_N)\),以及一个整数 \(M\)

对于每个 \(k=1,2,\cdots,M\),请你求出对 \(A\) 恰好进行 \(k\) 次如下操作后 \(A_N\) 的值。

  • 对于所有 \(i\)\(1\leq i\leq N\)),将 \(A_i\) 的值替换为 \(A_1\oplus A_2\oplus \cdots\oplus A_i\)。这个替换对所有 \(i\) 同时进行。

这里,\(\oplus\) 表示按位异或(bitwise XOR)运算。

\(1 \leq N \leq 10^6 , 1 \leq M \leq 10^6,0 \leq A_i < 2^30\)


  1. 对序列 \(A\)\(m\) 次前缀和后得到序列 \(A^m\), 有 \(A^m_n = \sum_{k=1}^{n} \binom{m-1+n-k}{m-1}A_k\) , 可以由格路计数得到证明.

  2. 由 lucas 定理得,\(\binom{n}{m}\) 是奇数当且仅当在二进制下 \(\forall i, m_i \leq n_i\).


P6521 [CEOI 2010] pin (day2)

给定 \(n\) 个长度为 \(4\) 的字符串,你需要找出有多少对字符串满足恰好 \(D\) 个对应位置的字符不同。

\(2 \leq n \leq 5 \times 10^4, 1 \leq d \leq 4\)

所有输入的字符串没有重复。


我们容斥一下,把原来的问题转化成恰好 \(4-D\) 个位置相同。然后转化成钦定以后容斥就好了。


P3349 [ZJOI2016] 小星星

小 Y 是一个心灵手巧的女孩子,她喜欢手工制作一些小饰品。她有 \(n\) 颗小星星,用 \(m\) 条彩色的细线串了起来,每条细线连着两颗小星星。

有一天她发现,她的饰品被破坏了,很多细线都被拆掉了。这个饰品只剩下了 \(n-1\) 条细线,但通过这些细线,这颗小星星还是被串在一起,也就是这些小星星通过这些细线形成了树。小 Y 找到了这个饰品的设计图纸,她想知道现在饰品中的小星星对应着原来图纸上的哪些小星星。如果现在饰品中两颗小星星有细线相连,那么要求对应的小星星原来的图纸上也有细线相连。小 Y 想知道有多少种可能的对应方式。

只有你告诉了她正确的答案,她才会把小饰品做为礼物送给你呢。

\(n \leq 17, m \leq \frac{1}{2}n(n-1)\)


暴力的做法是定义状态f[i][j][S]表示节点i编号为j,i的子树内的编号集合为S的方案数。

但是这样的瓶颈在于枚举子集,复杂度是 \(O(n^3\times 3^n)\)

尝试把「编号是一个1到n的排列」这一条件去掉,就不用记录S了。

这样只需要定义f[i][j]为在i的子树内,点i的编号为j的方案数。

而这时候会出现重复编号,怎么办呢?


我们可以容斥,\(2^n\) 枚举子集 \(S\) , 强制规定树上每个点的编号必须是S的子集 , 然后每次 \(O(n^3)\) 一次DP.


二项式反演

\[G(n) = \sum_{i=0}^{n}\tbinom{n}{i}(-1)^{i}F(i) \Leftrightarrow F(n) = \sum_{i=0}^{n}\tbinom{n}{i}(-1)^{i}G(i) \]

\[G(n) = \sum_{i=0}^{n}\tbinom{n}{i}F(i) \Leftrightarrow F(n) = \sum_{i=0}^{n}\tbinom{n}{i}(-1)^{n-i}G(i) \]

\[G(n) = \sum_{i=n}\tbinom{i}{n}F(i) \Leftrightarrow F(n) = \sum_{i=n}\tbinom{i}{n}(-1)^{i-n}G(i) \]


P5505 [JSOI2011] 分特产

https://www.luogu.com.cn/problem/P5505


我们要求恰好 \(0\) 个同学没有分到特产的方案数

我们设 \(f_i\) 表示钦定 \(i\) 个同学没有分到特产。

那么有 \(f_i = \binom{n}{i}\prod_{j=1}^{m}\binom{a_j + n - i - 1}{n - i - 1}\)

然后我们用二项式反演就可以了

posted @ 2025-08-12 20:26  lghjl  阅读(11)  评论(0)    收藏  举报