- 博客(125)
- 收藏
- 关注
原创 [算法] 前缀函数与KMP算法
但是这意味着最后一个块同倒数第二个块相等,并且倒数第二个块同倒数第三个块相等,等等。作为其结果,所有块都是相等的,因此我们可以将字符串。整除),也即其所表示的后缀将部分的覆盖第一个块。现在考虑字符串的第二个块。值得注意的是,我们也可以重新计算在头部添加一个字符,或者从尾或者头移除一个字符时的本质不同子串数目。,我们希望找到其最短的「压缩」表示,也即我们希望寻找一个最短的字符串。就是答案,否则不存在一个有效的压缩,故答案为。更小的压缩表示,那么前缀函数的最后一个值。最长的相等的真前缀与真后缀的长度。
2024-11-25 18:47:31
472
原创 [复健计划][紫书]Chapter 7 暴力求解法
如果某问题的解可以由多个步骤得到,而每个步骤都有若干种选择(这些候选方案集可能会依赖于先前作出的选择),且可以用递归枚举法实现,则它的工作方式可以用。,n-1}的子集S:从右往左第i位(各位从0开始编号)表示元素i是否在集合S中。个结点,所有部分解(不完整的解)也对应着解答树上的结点,最后几层结点数占整棵树的绝大多数。构造一个位向量B[i],而不是直接构造子集A本身,其中B[i]=1,当且仅当i在子集A中。当用二进制表示子集时,位运算中的按位与、或、异或对应集合的交、并和对称差。
2024-11-07 22:09:08
512
原创 语法note
但这也是不保险的——在MinGW的gcc中,要把%lld改成%I64d,但奇怪的是VC2008里又得改回%lld。long long在Linux下的输入输出格式符为%lld,但Windows平台中有时为%I64d。int一般是32位整数,范围-2147483648~2147483647,即。double的精度为15至16位。1bit(符号位) 11bits(指数位) 52bits(尾数位)1bit(符号位) 8bits(指数位) 23bits(尾数位)0 表示如果数字不足3位,在左边用0补成3位。
2024-09-23 09:26:33
640
转载 搜索的优化
在搜索过程中,如果我们能够得知搜索树的当前节点沿着某几条不同分支到达的子树是等效的,那么只需要对其中一条路径进行搜索。在一些问题中,搜索树的各个分支之间的顺序是不固定的。不同的搜索顺序会产生不同的搜索形态,规模也相差甚远。极端法:考虑极端情况,如果最极端(最理想)的情况都无法满足,那么肯定实际情况搜出来的结果不会更优了。数学方法:比如在图论中借助连通分量,数论中借助模方程的分析,借助不等式的放缩来估计下界等等。在搜索过程中,每次对当前状态进行检查,如果发现不可能到达递归边界,就执行回溯。
2024-06-30 08:52:21
76
原创 斜率优化dp
形如dp[i]=min{A(i)×B(j)+C(i)+D(j)}dp[i]=min{A(i)×B(j)+C(i)+D(j)}的转移方程可尝试使用斜率优化。(取maxmaxmax是类似的,本文不赘述)
2022-10-26 18:45:59
369
原创 势能线段树(均摊分析)
对于每个区间维护区间内的 最大值MaxMaxMax 和 最小值MinMinMin,对于整除操作,如果有Max−⌊Maxd⌋=Min−⌊Mind⌋Max-\lfloor\frac{Max}{d}\rfloor = Min − \lfloor\frac{Min}{d}\rfloorMax−⌊dMax⌋=Min−⌊dMin⌋,就转化为区间减。否则直接向下递归。考虑何时满足Max−⌊Maxd⌋=Min−⌊Mind⌋Max-\lfloor\frac{Max}{d}\rfloor = Min − \lfloor\
2022-03-23 15:43:00
1139
原创 基环树小记
概念基环树就是有n个点n条边的图(比树多出现一个环)。特殊形态的基环树无向树(N点N边无向图)外向树(每个点只有一条入边)内向树(每个点只有一条出边)以上三种树有十分优秀的性质,就是可以直接将环作为根。就可以对每个环的子树进行单独处理,最后再处理环找环无向图#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace
2021-11-19 16:11:53
307
原创 [XSY4197] Snow(树形DP)
我们在树上的每个点iii上放aia_iai个小点,初始时先让每个点单独减,这样要花费aia_iai之和的次数。然后尝试把某些减合并。一个点上面的小点至多可以向两个相邻的小点连边(这两个小点不能在同一个点上)。每连一条边,合并次数+1,答案-1。问题变成求一棵树内的最大合并次数。首先明确该问题满足最优子结构,即考虑以UUU为根的子树时,若U,VU,VU,V上的小点u,vu,vu,v可以合并,合并u,vu,vu,v 一定不比 不合并u,vu,vu,v以让fau,ufa_u,ufau,u合并 劣。
2021-11-19 15:20:36
320
原创 位运算及其性质
定义运算名符号效果按位与&如果两个相应的二进制位都为1,则该位的结果值为1,否则为0按位或l两个相应的二进制位中只要有一个为1,该位的结果值为1按位异或^若参加运算的两个二进制位值相同则为0,否则为1取反~对一个二进制数按位取反,即将0变1,将1变0左移<<用来将一个数的各二进制位全部左移N位,右补0右移>>将一个数的各二进制位右移N位,移到右端 的低位被舍弃,对于无符号数,高位补0性质及应用
2021-11-19 12:50:23
757
原创 [XSY3112] 接水果(树上包含路径,整体二分,扫描线)
给出一棵nnn个点的树。接下来给出PPP条树上路径ai→bia_i\to b_iai→bi,及其权值cic_ici。最后有QQQ个询问,每个询问给出一条树上路径ui→viu_i\to v_iui→vi,问在包含ui→viu_i\to v_iui→vi的所有树上路径中(包含指ui→viu_i\to v_iui→vi是ai→bia_i\to b_iai→bi的子路径),权值第kkk小的路径权值是多少?不妨设dep[u]<dep[v]dep[u]<dep[v]dep[u]<
2021-11-19 12:05:52
144
原创 [AGC009B] Tournament(多叉树转二叉树后的最小可能深度)
传送门把aia_iai看成faifa_ifai,建出一棵多叉树,再把多叉树转成二叉树,转出来的每棵二叉树对应着一种比赛方式。以n=8,a2,...,8=1,1,2,4,3,3,3n=8,a_{2,...,8}=1,1,2,4,3,3,3n=8,a2,...,8=1,1,2,4,3,3,3为例,多叉树转出的二叉树深度=赛程二叉树的深度考虑求多叉树转二叉树后的最小可能深度:假设uuu的所有儿子vvv的子树都已经转化好了:现在要把uuu的子树转成二叉树:设dep[x]dep[x]dep[
2021-11-19 11:08:21
341
原创 [XSY4170] 妹子(线段树上二分)
传送门题意:给出两个长度为NNN的整数序列A1A2...ANA_1A_2...A_NA1A2...AN,B1B2...BNB_1B_2...B_NB1B2...BN。有MMM组询问(opt,l,r,d)(opt,l,r,d)(opt,l,r,d),令n=r−l+1n=r-l+1n=r−l+1若opt=Aopt=Aopt=A:∀i∈[1,n],ai=Al+i−1+d,bi=Bl+i−1\forall i\in[1,n],a_i=A_{l+i-1}+d,b_i=B_{l+i-1}∀i∈[1,n
2021-11-18 17:28:33
157
原创 [XSY] 选举(线段树优化dp)
选举//a[i]=1 or 0 or -1,表示i支持小奇 or 中立 or 支持魔法猪//sum[i]=a[1]+a[2]+...+a[i] //设dp[i]表示把1~i划分成若干区间,(小奇得票-魔法猪得票)的最大值 /*dp[i]=max { dp[j]+1 (sum[i]-sum[j]>0即sum[i]>sum[j]) dp[j] (sum[i]-sum[j]=0即sum[i]=sum[j]) dp[j]-1 (sum[i]-sum[j]<0即sum
2021-11-18 15:15:03
183
原创 [CF995F] Cowmpany Cowmpensation(树形dp,拉格朗日插值)
树形DP:设f[u][i]f[u][i]f[u][i]表示给uuu的子树分配工资,uuu点工资为iii的方案数f[u][i]=∏v∈sonu(∑j=1if[v][j])f[u][i]=\prod\limits_{v\in son_u}(\sum\limits_{j=1}^{i}f[v][j])f[u][i]=v∈sonu∏(j=1∑if[v][j])前缀和优化:设g[u][i]=∑j=1if[u][j]g[u][i]=\sum\limits_{j=1}^{i}f[u][j]g[u][i]=j=
2021-11-18 14:45:30
184
原创 some useful tricks
异或题思考方向:01trie树,分治2. 二分图最大匹配,最大独立集互相转换3. Snow4. Code5. Code6. Code7. 题目#include<iostream>#include<cstdio>using namespace std;const int N=100010;int n,p,nxt[N],no[200];char s[N];int main(){ scanf("%d",&n); fo...
2021-11-17 22:13:10
256
原创 [XXSY] 构树(prufer序列,树上连通块DP)
传送门CayleyCayleyCayley公式:一个完全图有nn−2n^{n-2}nn−2棵无根生成树(可用prufer序列证明)扩展CayleyCayleyCayley公式:被确定边分为大小为a1,a2,⋯ ,ama_1,a_2,\cdots, a_ma1,a2,⋯,am的连通块,则有nm−2∏i=1main^{m-2}\prod\limits_{i=1}^{m}{a_i}nm−2i=1∏mai种生成树我们可以强制生成树中的边是否与原树中的边相同。设dp[u][i][j]dp[u][i]
2021-11-17 14:42:07
624
原创 [XSY4220] 九万步(结论)
手动构造发现 x=6x=6x=6 时是可行的-101234567xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
2021-11-15 15:44:25
247
原创 关于二项式
组合数(nm)\dbinom{n}{m}(mn):从 nnn 个物品中选出 mmm 个的方案数。(nm)=n!m!(n−m)!=nm‾m!\dbinom{n}{m}=\dfrac{n!}{m!(n-m)!}=\dfrac{n^{\underline{m}}}{m!}(mn)=m!(n−m)!n!=m!nm(这个式子只依靠经典的组合意义,所以只在 0≤m≤n0\leq m\leq n0≤m≤n 时确保成立。)推论:对称性:(nm)=(nn−m)\dbinom{n}{m}=\dbinom
2021-11-05 11:08:10
327
原创 生成函数化简技巧
一些重要式子∑i=0∞xi=11−x\sum_{i=0}^{\infty}x^i=\frac{1}{1-x}∑i=0∞xi=1−x1推论:11−ax=∑i=0∞aixi\frac{1}{1-ax}=\sum_{i=0}^{\infty}a^ix^i1−ax1=∑i=0∞aixi11−xk=∑i=0∞xik\frac{1}{1-x^k}=\sum_{i=0}^{\infty}x^{ik}1−xk1=∑i=0∞xik11−cxk=∑i=0∞cixik\frac{1}{1-cx^k}=\
2021-11-04 13:55:13
263
原创 阶乘幂与有限微积分
定义差分算子Δ\DeltaΔ:Δf(x)=f(x+1)−f(x)\Delta f(x)=f(x+1)-f(x)Δf(x)=f(x+1)−f(x)平移算子EEE:Ef(x)=f(x+1)E f(x)=f(x+1)Ef(x)=f(x+1)下降幂:n>0,{xn‾=x(x−1)(x−2)...(x−n+1)x−n‾=1(x+1)(x+2)(x+3)...(x+n)n>0,\begin{cases}x^{\underline{n}}=x(x-1)(x-2)...(x-n+1)\\x^{\unde
2021-11-04 12:20:21
509
原创 2021-10-22
扫描线:https://www.cnblogs.com/Parsnip/p/10887135.htmlhttps://blog.youkuaiyun.com/Emma2oo6/article/details/120584307LIS& LCShttps://www.xuebuyuan.com/586419.htmlhttps://blog.youkuaiyun.com/guhaiteng/article/details/52643015https://blog.youkuaiyun.com/murmured/article
2021-10-22 18:05:11
132
原创 图论复习汇总
三元环计数&四元环计数Blogdfs树,点双,边双,强连通分量Blogbfs树对一个图运行 bfs 算法,每个点uuu的父亲定义为第一次遍历uuu时的前驱结点,若无则为根。非树边只存在在同一层的两个点和相邻层的点中。hihoCoder1147 时空阵题意:问111号点到nnn号点距离恰好为mmm的图的个数。图的边权为111。n,m≤100n,m \leq 100n,m≤100题解:dp(i,j,k)dp(i,j,k)dp(i,j,k) 表示做了前iii层,上一层用jjj个点,
2021-10-20 21:11:39
293
原创 图论复习——最短路
知识点最短路径算法最短路径树每个点uuu的父亲为使uuu得到最短距离的前驱节点,若有多个,则取任意一个。题目CF449B Jzzhu and CitiesBlogCF464E The Classic ProblemBlog[XSY3888] 传送门对每个点uuu,记d(u)d(u)d(u)表示uuu到TTT的最短路,e(u)e(u)e(u)表示删掉它和最短路上父亲的边后的最短路。令dp(u)dp(u)dp(u)表示S=uS=uS=u时的答案。每次找到dpdpdp值最小的点来更新其它
2021-10-20 21:06:32
257
原创 并查集小记
有什么用:查询元素a和元素b是否属于同一组合并元素a和元素b所在组代码实现:#include<iostream>using namespace std;int n,m,p;int fa[5001];int find(int x){ if(fa[x]==x) return x; else{ return fa[x]=find(fa[x]); }}int main(){ cin>>n>>m>
2021-10-20 17:18:51
102
原创 二分图匹配
定义:二分图:一个图被分成了两部分,相同的部分没有边匹配:二分图G的子图M中,M的边集{E}中的任意两条边都不指向同一个顶点极大匹配:在当前已完成的匹配下,无法再通过增加未完成匹配的边的方式来增加匹配的边数最大匹配:是所有极大匹配当中边数最大的一个匹配完全匹配(完备匹配):一个匹配中,图中的每个顶点都和图中某条边相关联有什么用:定理1:最小点覆盖数 = 最大匹配数点覆盖:点集合使得任意一条边至少有一个端点在集合中定理2:最大独立集 = 顶点数 - 最大匹配数
2021-10-20 17:16:32
2953
原创 欧拉回路&哈密顿回路
欧拉回路总结有向图,无向图,混合图的欧拉回路判定百度百科Fleury算法Hierholzer算法//寻找无向图的欧拉路径#include<iostream>#include<vector>#include<stack>using namespace std;vector<int> g[1001];int n,m,x,y,d[1001],s=-1,t=-1;bool vis[1001][1001];stack<int> a
2021-10-20 17:07:11
304
原创 最小割小记
参考博客:最小割浅谈关于最小割常用描述表述一:删去若干条边使得源点到汇点不连通,求删边的权值和的最小可能值。表述二:将点集分为(S,T)(S,T)(S,T),记所有从SSS中出发到TTT中的边的权值和为c(S,T)c(S,T)c(S,T),求c(S,T)c(S,T)c(S,T)的最小值。求最小割a. 以权值为容量,该网络最大流的值即为最小割的值b. 在残量网络中,从源点出发进行一次增广BFS,即得到一个分割。该分割是一个最小割。题型1:对求最小割原理的理解[AHOI2009]最
2021-10-19 22:29:48
355
原创 [NOI2014] 起床困难综合症(二进制,贪心)
#include<bits/stdc++.h>int n,m,ans,x,a1=0,a2=-1;//-1的补码:11111111111... char str[5];int main(){ scanf("%d%d",&n,&m); while(n--){ scanf("%s%d",str,&x); if(str[0]=='A') a1&=x, a2&=x; if(str[0]=='X') a1^=x, a2^=x; if(st.
2021-10-19 16:24:35
122
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人