摘要:二进制集合枚举子集 枚举一个二进制集合的子集,可以看做原集合忽略0之后不断 1 就有了这样一种算法: i 1使得末尾的0全部变成1,但是由于&s,原来是0的位无论如何也不会变成1,但是原来是1的位就形成了不断 1的模式 卡空间 mx占18位,ls和rs占23位 斐波拉契数列 $f[i] = f[i 阅读全文
posted @ 2018-12-30 16:25 zzy2005 阅读 (63) 评论 (1) 编辑
摘要:LCA Tarjan代码: KMP模板 EXBSGS cpp include using namespace std; define LL long long const int Mod = 1e5 + 7; int gcd(int x, int y) { return !y ? x : gcd(y 阅读全文
posted @ 2018-12-29 17:26 zzy2005 阅读 (98) 评论 (0) 编辑
摘要:令$f_n$表示$n$个点的二叉树个数;$g_n$表示$n$个点的所有$f_n$棵二叉树的叶节点总数。 我们发现一个规律:$g_n=nf_{n 1}$ 证明: 对于每棵$n$个点的二叉树,如果里面有$k$个叶节点,那么我们分别把这$k$个叶子删去会得到$k$棵$n 1$个点的二叉树,那么一颗$k$个 阅读全文
posted @ 2019-11-11 16:03 zzy2005 阅读 (3) 评论 (0) 编辑
摘要:"题目链接" 题解 设$b[i]=a[i]\ xor\ a[i+1]$ 我们可以发现,修改只会改变$b[l 1]$和$b[r]$ 然后发现$b[i]=1$的点最多$2 k$个 状压$dp$ Code 阅读全文
posted @ 2019-10-25 11:48 zzy2005 阅读 (9) 评论 (0) 编辑
摘要:"题目链接" 题解 一个数能被一些数整除,那么一定被这些数的$lcm$整除 那么我们容易想到根据$lcm$设状态 我们可以发现有用的$lcm$只有$48$个 那么按照一般的数位$dp$ 设出状态:$f_{i,j,k,0/1}$表示前$i$位,$lcm=j$,模$lcm$的余数是$k$,是否达到上界 阅读全文
posted @ 2019-10-21 21:58 zzy2005 阅读 (9) 评论 (0) 编辑
摘要:"CF573E Bear and Bowling" 阅读全文
posted @ 2019-10-21 15:22 zzy2005 阅读 (12) 评论 (0) 编辑
摘要:灭虫 "题目链接" 【问题描述】 你需要在一条无限长的道路上喷洒杀虫剂。 在这条道路上,总共有 N 个投放点,其中第 i 个投放点在数轴上坐标 pi 处。在每一 个投放点,你可以选择往左喷洒或往右喷洒。但是由于风向和地理环境的影响,向左喷洒和 向右喷洒的效果不一定相同。具体来说,在一个位置向左喷洒, 阅读全文
posted @ 2019-09-21 22:43 zzy2005 阅读 (22) 评论 (0) 编辑
摘要:费马小定理&欧拉定理 费马小定理: 如果$p$是一个质数,而整数$a$不是$p$的倍数,$a^{p 1}\equiv1\pmod p$ 欧拉定理: 当$a$与$n$互质时,$a^b \equiv a^{b\%\phi(n)} \pmod n$ 扩展欧拉定理: $$ a^b \equiv \begin 阅读全文
posted @ 2019-09-15 18:24 zzy2005 阅读 (18) 评论 (0) 编辑
摘要:Lucas定理 当$p$是质数时,有$(^n_m)\equiv(^{n/p}_{m/p}) (^{n\%p}_{m\%p}) \pmod{p}$ 狄利克雷卷积 定义:$(f g)(n)=\sum_{d|n}f(d)g(\frac{n}{d})$ 然后满足交换律,结合律,分配律 单位元:$e=[n=1 阅读全文
posted @ 2019-09-15 09:04 zzy2005 阅读 (30) 评论 (0) 编辑
摘要:floyd判圈算法又称龟兔赛跑算法 算法流程 两个指针$P1,P2$ $P1$每次向后跳一次 $P2$每次向后跳两次 显然,如果$P1,P2$相遇才有环 现在我们想求环长和环的起点. 设起点到环的距离为$len$ 环的起点离相遇点距离$rem$ 设两个指针分别走了$p,q$步 那么,$p=len+r 阅读全文
posted @ 2019-08-05 21:32 zzy2005 阅读 (17) 评论 (0) 编辑
摘要:"题目链接" 题解 首先,答案肯定等于$\sum w_i$ 乘上一个系数$P$ 那么我们只要求这个系数是多少 注意到,$W(S)=|S|\sum_{x∈S}w_x$ 那么等于$x$对集合中每个元素贡献了$1$次 那么系数$P$就等于一个数被贡献了多少次 显然,自己对自己的贡献是$S(n,k)$ 其它 阅读全文
posted @ 2019-07-28 22:17 zzy2005 阅读 (10) 评论 (0) 编辑
摘要:"题目链接" 题解 首先,对于每个$i$向$a[i]$连边. 这样会连出许多独立的环. 可以证明,交换操作不会跨越环. 每个环内的点到最终状态最少交换步数是 $环的大小 1$ 那么设$f[i]$表示环大小为$i$的方案数 则 $$ f[i] = \sum_{x+y=i}f[x] f[y] g(x,y 阅读全文
posted @ 2019-07-28 21:22 zzy2005 阅读 (11) 评论 (0) 编辑
摘要:Step1: 首先定义一个点的权值为与其相连边的异或和。那么修改一条路径,权值改变的只有两个端点。边权都为0和点权都为0实质相同。 Step2: 那么现在和树的结构就没有什么关系了。每次选两个点,然后同时异或上一个值。求最小次数。 Step3: 首先权值为0的不用修改了,贪心先把权值一样的两两分组。 阅读全文
posted @ 2019-07-13 19:17 zzy2005 阅读 (27) 评论 (0) 编辑
摘要:参考资料: 李煜东《算法竞赛进阶指南》 斜率优化 形如: $f[i] = min\{f[j]+val(i,j)\}$的dp,多项式$val(i,j)$包含$i,j$的乘积项 引入一个例题: "[HNOI2008]玩具装箱TOY" $dp[i] = min\{dp[j] + (sum[i] + i s 阅读全文
posted @ 2019-07-01 17:38 zzy2005 阅读 (25) 评论 (0) 编辑
摘要:"传送门" 题解 题面大意: $0.$区间加节点 $1.$区间换根 $2.$单点询问距离 如果没有$1$操作,因为区间加节点都是加在下面,所以我们可以直接把$n$棵树压成一棵树,直接询问即可 有$1$操作怎么办? 上面挖掘了一点性质, 加节点加在下面,那么我们可以先把节点都加上去,再询问 那么把操作 阅读全文
posted @ 2019-04-02 17:32 zzy2005 阅读 (31) 评论 (0) 编辑
摘要:题面 "bzoj" 题解 "bzoj2959: 长跑" 的弱化版 产生了环就并查集维护一下 Code cpp include define LL long long define RG register using namespace std; template inline void read(T 阅读全文
posted @ 2019-03-28 19:49 zzy2005 阅读 (39) 评论 (0) 编辑
摘要:题面 "luogu" 题解 其实就是一颗二叉树 我们假设左儿子小于根,右儿子大于根 考虑树形$dp$ $f[u][i]$表示以$u$为根的子树,$u$为第$i$小 那么考虑子树合并 其实就是两个序列的合并 如果是左子树 枚举$j$为子树内有多少个数小于其根 那么以$i$为根的子树一定至少有$j$个 阅读全文
posted @ 2019-03-28 16:29 zzy2005 阅读 (20) 评论 (0) 编辑