2019金华正睿集训总结

emmm…蒟蒻第一次出来集训,也是2019年noip(现在应该叫csp的说)前最后一次外出集训…
感觉压力好大啊…毕竟才学了不到一年啊…
但不管怎样,接下来几天要好好加油啊!

DAY1

仅自己用的链接(file:///C:/Users/Belief、御风/Desktop/19.7.28)

主讲概率与期望。

基础概念:
(概率与期望入门必备知识)
1、随机变量:有多种可能的取值的变量
2、 P ( a ) P(a) P(a):事件 a a a发⽣的概率
3、 E ( x ) E(x) E(x):随机变量 x x x的期望值, E ( x ) = ∑ P ( x = i ) ∗ i E(x)=\sum P(x=i)*i E(x)=P(x=i)i
4、独⽴事件:互相不影响的事件,满⾜ P ( a b ) = P ( a ) P ( b ) P(ab)=P(a)P(b) P(ab)=P(a)P(b)
5、对于独⽴事件,我们有 E ( a b ) = E ( a ) E ( b ) E(ab)=E(a)E(b) E(ab)=E(a)E(b)
6、当 0 < x < 1 00<x<1 时, ∑ i = 0 ∞ x i = 1 1 − x \sum^\infty_{i=0} x^i=\frac 1{1-x} i=0xi=1x1 ∑ i = 0 n x i = 1 − x n + 1 1 − x \sum^n_{i=0} x^i=\frac{1-x^{n+1}}{1-x} i=0nxi=1x1xn+1
7、期望的线性性: E ( x + y ) = E ( x ) + E ( y ) E(x+y)=E(x)+E(y) E(x+y)=E(x)+E(y)

常用技巧:
(介绍前缀和这一技巧)
1、对于离散变量 x x x P ( x = k ) = P ( x < = k ) − P ( x < = k − 1 ) P(x=k)=P(x<=k)-P(x<=k-1) P(x=k)=P(x<=k)P(x<=k1)
2、有 n n n个随机变量 x [ 1 … n ] x[1…n] x[1n],每个随机变量都是从 1 … s 1…s 1s中随机⼀个整数,求 m a x ( x [ 1 … n ] ) max(x[1…n]) max(x[1n])的期望
3、概率为 p p p的事件期望 1 / p 1/p 1/p次后发⽣
emmm…
今天的话听课感觉还好,基本能听懂和理解但可能实际使用会emmm…毕竟我发现我代码能力有点菜。
所以还是在课后好好敲一下看吧。
然后…

老师推荐的神题???:
经典拿球问题和游走问题,嗯,帮助理解了一下,结果变式依然那么…
接下来又是经(mo)典(gui)的10个例题…
1、每次随机⼀个 [ 1 , n ] [1,n] [1,n] 的整数,问期望⼏次能凑⻬所有数
2、随机⼀个⻓度为 n n n 个排列 p p p,求 p [ 1 … i ] p[1…i] p[1i] p [ i ] p[i] p[i] 是最⼤的数的概率
3、问满⾜上⾯那个题的 i i i 的个数的平⽅的期望
4、随机⼀个⻓度为 n n n 的排列 p p p,求 i i i j j j 的后⾯的概率
5、随机⼀个⻓度为 n n n 的排列 p p p,求它包含 w [ 1 … m ] w[1…m] w[1m] 作为⼦序列/连续⼦序列的概率
6、有 n n n 堆⽯头,第 i i i 堆个数为 a [ i ] a[i] a[i],每次随机选⼀个⽯头然后把那⼀整堆都扔了,求第 1 1 1 堆⽯头期望第⼏次被扔
7、随机⼀个⻓度为 n n n 的01串,每个位置是 1 1 1 的概率是 p p p ,定义 x x x 是每段连续的 1 1 1 的⻓度的平⽅之和,求 E ( x ) E(x) E(x)
8、给⼀个序列,每次随机删除⼀个元素,问 i i i j j j 在过程中相邻的概率
9、给定⼀棵树,将他的边随机⼀个顺序后依次插⼊,求 u , v u,v u,v 期望什么时候连通
10、给 1 … n 1…n 1n n n n 个数,每次随机选择⼀个还在的数并且删掉他的所有约数,求期望⼏次删完

还有鬼畜期望线性性练习题???:
1、给定 n n n 个硬币,第 i i i 个硬币的价值为 w [ i ] w[i] w[i],每次随机取⾛一个硬币,获得的收益是左右两个硬币的价值的乘积,求期望总价值
2、有 n n n 个数 a [ 1 … n ] a[1…n] a[1n],每次等概率选出两个数,然后合并成一个新的数放回来,得到的收益是新的数的值,求总收益的期望
3、给定一个数列列 w [ 1 … n ] w[1…n] w[1n],随机一个排列列 h h h,如果 h [ i ] h[i] h[i] ⽐比 h [ i − 1 ] h[i-1] h[i1] h [ i + 1 ] h[i+1] h[i+1] 都大,就获得 w [ i ] w[i] w[i] 的收益,求期望收益
4、给出一棵树,一开始每个点都是白的,每次选一个白点将他子树里所有点染黑,求期望几次染黑整个树
5、有 n n n 个⿊黑球, m m m 个⽩白球,每次等概率取出一个球(不放回),将取出来的球的颜⾊色写成一个01序列列,求 ”01” 的期望出现次数

嗯,听的有点绕,要好好消化。。。
另外地方要找题多做啊。

DAY2

仅自己用的链接(file:///C:/Users/Belief、御风/Desktop/19.7.29)

emmm…本来准备昨天讲的分治被拖到了今天。

简单介绍一下:
分治即分而治之,是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。

比较普通的分治:
1、求所有区间的最大值之和
2、求所有区间的最大值乘最小值之和
3、求所有区间的gcd之和
4、求二维平面上最近点对
5、分治多项式乘法
(这些都可以通过将区间分成两个区间,来将问题分成两个⼦子问题)

介绍下二分:
二分其实是对答案进行分治,是分数规划问题。
(可以去了解一下整体二分)

CDQ分治:
[ l , r ] [l,r] [l,r] 分成 [ l , m i d ] [l,mid] [l,mid] [ m i d + 1 , r ] [mid+1,r] [mid+1,r],考虑左边对右边的贡献。
题目有三维偏序,矩阵加,矩阵求和,缺1背包问题,缺点最短路问题,解地推式 f [ n ] = ∑ f [ i ] ∗ g [ n − i ] f[n]=\sum f[i]*g[n-i] f[n]=f[i]g[ni]

点分治:
基于树上的节点进行分治,本质其实是将一棵树拆分成许多棵子树处理,并不断进行,点分治是处理树上路径的一个极好的工具,一般如果需要大规模处理树上路径,点分治是一个不错的选择。

时间分治:
加边删边询问两点是否连通

然后讲图论惹。

这个不详细说了,多找找题目做吧,特别注意Tarjan,圈套圈,最短路变式,二分图,Hall定理应用,判断偶环。

一些基础术语:
出度,入度,度数,无向图,有向图,欧拉回路,哈密尔顿回路,环,简单环,连通块,强连通块,点双连通分量,边双连通分量,深度优先搜索(dfs),广度优先搜索(bfs)

一些基本算法:
Dijkstra,Bellman-Ford,SPFA(以及卡掉它的办法),Floyd 算法,Tarjan,圈套圈

一些题目类型:
判断负环,差分约束,次短路,最短路变式,求桥,求强联通分量,数环,欧拉回路,最小生成树,Prufer序列,二分图,Hall定理应用

接下来是字符串。

字符串不是很好,还需要多思考一下。

Hash:
比较两个字符串是否相等

KMP(还有AC自动机):
求两字符串最长的相等前后缀或一个串的最小循环节

后缀数组:
用来求最长重复子串,不可重叠最长重复子串,本质不同的子串个数,求 S[l…r] 的出现次数,高度总结一个公式 l c p ( x , y ) = m i n ( h [ p [ x ] ] . . . h [ p [ y ] − 1 ] ) lcp(x,y)=min(h[p[x]]...h[p[y]-1]) lcp(x,y)=min(h[p[x]]...h[p[y]1]),然后我这块挂了。

后缀自动机:
有个后缀树需要了解,这块也挂了,不介绍过多了。。。

DAY3

仅自己用的链接(file:///C:/Users/Belief、御风/Desktop/19.7.30)

组合计数。

介绍容斥原理:
列出题目中的 n n n 个条件,求满足这 n n n 个条件中每一个的方案的个数
枚举这些条件的所有 2 n 2^n 2n 个集合,考虑一个集合 p p p,令不满足 p p p 中所有条件的方案有 a a a 个,如果 p p p的大小是奇数,给答案减去 a a a,不然给答案加上 a a a

欧拉函数:
[ 1 , n ] [1,n] [1,n] 之间与 n n n 互质的数的个数
枚举每个因子放与不放

说一下补集思想:
正难则反,满足条件的=全部的-不满足条件的

连通图的数量:
连通图的数量=图的总数-不连通图的数量,而不连通数量可以计算。
欧拉图的数量也能用相同的方法计算。

线性性:
一般在求期望中使用的 E ( x + y ) = E ( x ) + E ( y ) E(x+y)=E(x)+E(y) E(x+y)=E(x)+E(y) 在组合计数时也可以用,具体考虑每个元素对答案的贡献

Burnside引理:
x x x 在置换 G G G 作用下的轨道等于每个置换群下不动元素的和除掉 G G G 的大小

之后就在讲杂题惹

DAY4

仅自己用的链接(file:///C:/Users/Belief、御风/Desktop/19.7.31)

上午三个人一组ACM

呃,5个小时11道题我们只过了5题,真的是太菜了呀。要知道都有人ak了呀!!!(不过听说这是正睿史上第一次ACM赛有人ak。。。)
开场1,2两题想的太复杂老半天没做出来。后面抱着侥幸心理试一下暴力,然后过了。。。
之后我开始弄我jio得可能可以的题(真香),另外两个队友在讨论另外一道,结果看的两道题我都无法实现,叫队友帮忙,结果尝试还是过不了,索性切了题。然后我过了一道,队友过了一道,又回来看之前两道中的一道,搞了半天过了。然后一看时间不够了,索性弃疗吃饭去吧。

下午讲解

听了1,2题,才明白其实这就是正解。
听老师说自己预期的签到题没什么人过,明明很难好吧。。。
另外基本也听懂了,就是赛后要好好消化一下啊。
然后,果然队员还是很有用很重要的啊,虽然这次真的不怎么好(49个队,35名),不过重在参与吧。
要加油啊。

DAY5

仅自己用的链接(file:///C:/Users/Belief、御风/Desktop/19.8.1)

初次接触网络流

介绍下定义:
一个网络流 G = ( V , E ) G=(V,E) G=(V,E) 为一张满足一下条件的有向图:
1、每一条边有一个非负容量,即对于任意 E E E 中的 ( u , v ) (u,v) (u,v),有 c ( u , v ) > = 0 c(u,v)>=0 c(u,v)>=0
2、如果 G G G 中存在边 ( u , v ) (u,v) (u,v),那么不存在 ( v , u ) (v,u) (v,u)。我们将图中不存在的边的容量定为0
3、图中含有两个特殊节点(源 s s s 和汇 t t t
一个流可看作是从 V ∗ V V*V VV R R R 的映射,满足下面两条性质:
1、容量限制:对于任意的 u , v u,v u,v 0 < = f ( u , v ) < = c ( u , v ) 0<=f(u,v)<=c(u,v) 0<=f(u,v)<=c(u,v)
2、流量守恒:对于任何非源汇的中间节点 u u u,满足 ∑ v ∈ V f ( v , u ) = ∑ v ∈ V f ( u , v ) \sum_{v\in V} f(v,u)=\sum_{v\in V} f(u,v) vVf(v,u)=vVf(u,v)

最大流问题:
找出一个满足上述条件的 f f f,使得 ∑ v ∈ V f ( s , v ) \sum_{v\in V} f(s,v) vVf(s,v) 被最大化,一个流 ∣ f ∣ |f| f 定义为 ∣ f ∣ = ∑ v ∈ V f ( s , v ) − ∑ v ∈ V f ( v , s ) |f|=\sum_{v\in V} f(s,v)-\sum_{v\in V} f(v,s) f=vVf(s,v)vVf(v,s)(由于在 G G G 图中不存在反向边,因而在上面的讨论中只需要最大化前半部分)
拓展带反向边的最大流问题和多源汇最大流问题

建模:
1、是否存在从s到t的可经过相同节点不经过相同边的两条路径?
2、是否存在从s到t的不可经过除s、t外相同节点的两条路径?
3、是否存在从s到t的不可经过除s、t外相同节点和相同边的两条路径?
点容量解决方法:拆点,将容量限制转化到边上

最大流的基本想法:
残量网络:
1、对于网络G,其残量网络G_f与G的差别在于每条边的边容量修改为G中边容 量减去当前流的该边流量。具体来说, c f ( u , v ) = c ( u , v ) − f ( u , v ) c_f (u,v)=c(u,v)-f(u,v) cf(u,v)=c(u,v)f(u,v)
2、另外,残量网络中还包含原图中所有边的反向边,容量等同于正向边在f中 当前流量,用于“反悔”时将流送回起点: c f ( v , u ) = f ( u , v ) c_f (v,u)=f(u,v) cf(v,u)=f(u,v)
增广:
f ′ f' f 为残量网络 G f G_f Gf 上的一个流 ( f ↑ f ′ ) ( u , v ) = ( u , v ) ∈ E ? f ( u , v ) + f ′ ( u , v ) − f ( v , u ) : 0 (f\uarr f')(u,v)= (u,v)\in E ? f(u,v)+f'(u,v)-f(v,u) : 0 (ff)(u,v)=(u,v)E?f(u,v)+f(u,v)f(v,u):0
引理1:
增广后的网络的流量等于两个流流量直接相加
因为这是流(那条性质)而且流量相同,所以 ∣ f ↑ f ′ ∣ = ∣ f ∣ + ∣ f ′ ∣ |f\uarr f'|=|f|+|f'| ff=f+f
增广路:
1、残量网络当中 s s s t t t 的一条简单路径
2、增广路 p p p 的流量定义为 c f ( p ) = m i n ( u , v ) : ( u , v ) ∈ p c_f (p)=min{(u,v):(u,v) \in p} cf(p)=min(u,v):(u,v)p
3、若是将 p p p 上的每条边的流量均赋为 c f ( p ) c_f (p) cf(p),所形成的依然是满足条件的原图的一个流
结论1:
增广后流量增加,即令 f p f_p fp 为当前流f的残量网络中找到的一增广路,则 ∣ f ↑ f p ∣ = ∣ f ∣ + ∣ f p ∣ > ∣ f ∣ |f\uarr f_p|=|f|+|f_p|>|f| ffp=f+fp>f
割:
为一个对于点集 V V V 的划分,将 V V V 划分为两个集合 S S S T T T,其中源点 s s s S S S 中,汇点 t t t T T T 中。对于一个流 f f f 而言,割 ( S , T ) (S,T) (S,T) 间的网络流定义为 f ( S , T ) = ∑ u ∈ S ∑ v ∈ T f ( u , v ) − ∑ u ∈ S ∑ v ∈ T f ( v , u ) f(S,T)=\sum_{u\in S} \sum_{v\in T} f(u,v)-\sum_{u\in S} \sum_{v\in T} f(v,u) f(S,T)=uSvTf(u,v)uSvTf(v,u)
( S , T ) (S,T) (S,T) 的容量定义为 c ( S , T ) = ∑ u ∈ S ∑ v ∈ T c ( u , v ) c(S,T)=\sum_{u\in S} \sum_{v\in T} c(u,v) c(S,T)=uSvTc(u,v)
对一个网络而言,最小割为所有的割当中容量最小的那个
引理2:
由流量守恒导出,对于任意流 f f f,任意割之间的网络流量不变,即 f ( S , T ) = ∣ f ∣ f(S,T)=|f| f(S,T)=f
结论2:
∣ f ∣ = f ( S , T ) = ∑ u ∈ S ∑ v ∈ T f ( u , v ) − ∑ u ∈ S ∑ v ∈ T f ( v , u ) < = ∑ u ∈ S ∑ v ∈ T f ( u , v ) < = ∑ u ∈ S ∑ v ∈ T c ( u , v ) = c ( S , T ) |f|=f(S,T)=\sum_{u\in S} \sum_{v\in T} f(u,v)-\sum_{u\in S} \sum_{v\in T} f(v,u)<=\sum_{u\in S} \sum_{v\in T} f(u,v)<=\sum_{u\in S} \sum_{v\in T} c(u,v)=c(S,T) f=f(S,T)=uSvTf(u,v)uSvTf(v,u)<=uSvTf(u,v)<=uSvTc(u,v)=c(S,T)
任意流f的流量不超过任意割的容量,即 ∣ f ∣ < = c ( S , T ) |f|<=c(S,T) f<=c(S,T)
最大流最小割定理:
对于一个网络 G G G,下面三个命题总是等价:
1、流 f f f G G G 的最大流
2、当前流 f f f 的残留网络 G f G_f Gf 上不存在增广路
3、存在某个割使得 ∣ f ∣ = c ( S , T ) |f|=c(S,T) f=c(S,T),它即是最小割
证明自己搜一下吧,我也没太懂

Ford-Fulkerson算法:
Ford-Fulkerson (G,s,t){
	for each edge (u,v) ∈ G,E
		(u,v).f=0
	while there exists a path p from s to t in the residual network G_f{
		c_f(p)=min{c_f(u,v):(u,v) ∈ p}
		for each edge (u,v) ∈ p
			if (u,v) ∈ E
				(u,v).f+=c_f(p)
			else
				(u,v).f-=c_f(p)
	}
}

Edmonds-Karp算法:
在EF的基础上,将增广路的过程优化为每次寻最短增广路的过程,其中路径长度定义为从 s s s t t t 需要经过的边条数
引理3:
在EK中,令 d ( u ) d(u) d(u) 表示残量单位网络上从 s s s u u u 的最短路距离,那么对于 V s V_s Vs 中的任意 u u u,在每次增广后 d ( u ) d(u) d(u) 不降
定理:
在EK算法中,增广的次数是 O ( V E ) O(VE) O(VE),所以复杂度为 O ( V E 2 ) O(VE^2) O(VE2)
证明这里不给了

Dinic算法:
在EK的基础上,将每次寻找一条增广路优化为每次计算出一 个增广网络
在残量网络中,若两个端点间的最短路恰好差1,就称之为可行边,由所有可行边构成的图(最短路图),称为可行网络,在可行网络上的无法再扩充流量的流,称为阻塞流,注意不必是残量网络的 最大流,增广完一个阻塞流后, d ( t ) d(t) d(t)必增,因而最多增广 O ( V ) O(V) O(V)次,增广单次的实现和时间复杂度:
1、一个节点的dfs至多被调用O(E)次。
2、for循环外部的时间复杂度之和为 O ( V E ) O(VE) O(VE)
3、for循环执行次数可分为只经过一次的和经过多次的
4、经过一次的复杂度之和为 O ( E ) O(E) O(E)
5、经过多次的次数之和为 O ( V E ) O(VE) O(VE)
6、因此加了左边所有优化的dinic总复杂度为 O ( V 2 E ) O(V^2E) O(V2E)
(贴一下代码)

int dfs(int x,int sum)
{
	if(x==t||!sum) return sum;
	int res=0;
	for(int i=head[p];i;i=next[i])
	{
		int y=ver[i];
		head[x]=i;
		if(d[y]==d[x]+1&&w[i])
		{
			int tmp=dfs(v,min(sum-res,w[i])sd);
			res++tmp;
			w[i]-=tmp,w[rec[i]]+=tmp;
		}
		if(res==sum) return res;
	}
	if(!res) d[x]=-1;
	return res;
}

代码就是按某种顺序找增广路,一旦找到直接增广
(可以使用动态树优化找阻塞流并增广的过程,迭代次数不变,因而可以达到 O(VElogV)的复杂度)
阅读材料:
1、https://www.arl.wustl.edu/~jst/cse/542/text/sec19.pdf
2、http://courses.csail.mit.edu/6.854/16/Notes/n10-blocking_flows.html
单位容量网络指所有的存在的边容量均为1的网络
引理4:
dinic在单位容量网络中至多增广 O ( m i n ( E 1 2 , V 2 3 ) ) O(min(E^\frac {1}{2},V^\frac {2}{3})) O(min(E21,V32))
结论3:dinic在单位容量网络中寻找阻塞流可达O(E)复杂度
因此,在单位容量网络当中,dinic的时间复杂度可达 O ( E m i n ( E 1 2 , V 2 3 ) ) O(Emin(E^\frac {1}{2},V^\frac {2}{3})) O(Emin(E21,V32))
单位网络指对于 V s , t V_{s,t} Vs,t 中的任意一节点,都满足下面两条之一
1、仅存在一条单位容量的入边
2、仅存在一条单位容量的出边
结论4:dinic在单位网络中效率可达 O ( V 1 2 E ) O(V^\frac {1}{2}E) O(V21E) (跑二分图用)
例子:
最大权闭合子图(介绍略,自行再了解趴)
(证明再略,实在太多了,有空再加)

DAY6

仅自己用的链接(file:///C:/Users/Belief、御风/Desktop/19.8.2)

上午动态规划讲题

总结起来,灰常懵逼,找题目去练吧,没什么好多说的

下午树上数据结构

总结起来,还是灰常懵逼,我天这什么题有点崩溃啊。

DAY7

仅自己用的链接(file:///C:/Users/Belief、御风/Desktop/19.8.3)

数论专场

质因子分解:
素性测试:
试除法:
一种配合质数筛法可以做到 O ( n ) O(\sqrt n) O(n ) 的复杂度。 Miller-Rabin 素性测试:
可以做到 O(logn) 的复杂度,属于 RP 算法。
基本原理是费马小定理,于是对于某个 p,若能找到与它互质的 a 使得 a p − 1 ≠ 1 ( m o d p ) a^{p−1}\ne 1(mod p) ap1=1(modp),则 p p p 必不是质数。 然而有一些合数 p p p,满足所有与它互质的 a a a 都有 a p − 1 ≡ 1 a^{p−1}\equiv 1 ap11 (mod p p p),这种数称为Carmichael 数(如 561=3∗11∗17),这样的数是用上面的方法检验不出来的。 所以还需要奇素数判定。对于奇素数 p p p,如果 a p − 1 ≡ 1 a^{p−1}\equiv 1 ap11 (mod p p p) 即 ( a p − 1 2 + 1 ) ( a p − 1 2 − 1 ) ≡ 0 (a^\frac{p−1}{2}+1)(a^\frac{p−1}{2}−1)\equiv 0 (a2p1+1)(a2p11)0 (mod p p p),由于 F p F_p Fp 是整环, 所以 a p − 1 2 ≡ 1 a^\frac{p-1}{2}\equiv 1 a2p11 p − 1 p−1 p1。如果 p − 1 2 \frac{p−1}{2} 2p1 还是偶数则可以继续往下检验…用原根的一些理论可以证明这样就能保证对于任意合数至少 存在一个 a a a 可以判定它是合数。
其它还有印度人的AKS算法:
可以做到正确率 100% 的 O(logn) 复杂度。
但绝大多数情况 Miller-Rabin 都够优秀了。
质因子分解的方法:
试除法:
复杂度为 O ( n ) O(\sqrt n) O(n ),太慢。。。
Pollard’s Rho(又名启发式分解):
期望复杂度 O ( n 4 l o g n ) O(\sqrt[4] nlogn) O(4n logn) n n n 是素数的时候用Miller-Rabin素性测试,不是素数的时候,复杂度只和最小的质因子有关,所以称为启发式
假如要分解一个数 n n n,首先进行素性测试,是素数直接返回。 否则就要生成一些随机的 x [ i ] x[i] x[i],去求 g c d ( ∣ x [ i ] − x [ j ] ∣ , n ) gcd(|x[i]−x[j]|,n) gcd(x[i]x[j],n),如果它 ∈ ( 1 , n ) \in (1,n) (1,n) 则找到了 n n n 的一个因子,递归分解。 一个挺靠谱的随机方法就是 x ← x 2 + c x\larr x^2+c xx2+c c c c 是个随机数。 这样随机出来的 x x x 可能会进入循环,假如进入循环了我们还没找到因子,就重新随个 x x x c c c,重新做,可以证明 x ← x 2 + c x\larr x^2+c xx2+c,形成的一定是一个 ρ ρ ρ 形结构。 每次当 i i i 2 2 2 的幂次的时候就令 y ← x [ i ] y\larr x[i] yx[i],如果某时刻 x [ i ] = y x[i]=y x[i]=y 了则说明已经在环上绕了一圈了,这样“浪费”的步数仅仅是 O ( 环 长 ) O(环长) O() 级别的。

数论:
欧几里德算法:
x ∣ a , x ∣ b x|a,x|b xa,xb,则 x ∣ ( a + b ) x|(a+b) x(a+b),于是 g c d ( a , b ) = g c d ( b , a gcd(a,b)=gcd(b,a gcd(a,b)=gcd(b,a% b ) b) b)
扩展欧几里德:
已知 a , b a,b a,b,求出 x , y x,y x,y 满足 a ∗ x + b ∗ y = g c d ( a , b ) a*x+b*y=gcd(a,b) ax+by=gcd(a,b),在欧几里德算法中递归地求,若已有 b = 0 b=0 b=0,则 g c d = a gcd=a gcd=a,令 x = 1 , y = 0 x=1,y=0 x=1,y=0,否则求出 x ′ , y ′ x′,y′ x,y 满足 b x ′ + ( a − a / b ∗ b ) ∗ y ′ = g c d ( b , a bx′+ (a−a/b∗b)∗y′=gcd(b,a bx+(aa/bb)y=gcd(b,a% b ) = g c d ( a , b ) b)=gcd(a,b) b)=gcd(a,b)。 于是 a ∗ y ′ + b ∗ ( x ′ − a / b ∗ y ′ ) = g c d ( a , b ) a∗y′ +b∗(x′−a/b∗y′) = gcd(a,b) ay+b(xa/by)=gcd(a,b)
辗转相减(除)的其他用法:
只要一个环定义了带余除法,就可以在上面辗转相减(除),比如模合数的环、多项式环等等。比如求行列式模一个合数,根据行列式的性质可以把一行的倍数加到另一行上。辗转相减把其中一个位置消成0即可。比如求两个多项式的最大公约式,或者说多项式取模,可以不停地把一个的倍数加到另一个上,把其中一个多项式变成0。
类欧几里德:
s o l v e ( n , A , B , C ) = ∑ i = 1 n ⌊ A [ i ] + B C ⌋ solve(n,A,B,C)=\sum^n_{i=1}⌊\frac{A[i]+B}{C}⌋ solve(n,A,B,C)=i=1nCA[i]+B,如果 A > = C A>=C A>=C a n s + = n ( n + 1 ) 2 ∗ ( A / C ) ans+=n(n+1)^2∗(A/C) ans+=n(n+1)2(A/C),然后 A A A% = C =C =C,如果 ∣ B ∣ > = C |B|>=C B>=C,讨论下正负号算下,然后把 B B B 搞到 [ 0 , C ) [0,C) [0,C) 之间,设 m = ⌊ A [ n ] + B C ⌋ m=⌊\frac{A[n]+B}{C}⌋ m=CA[n]+B,则要算 ∑ i = 1 n ∑ j = 1 m [ C [ j ] < = A [ i ] + B ] \sum^n_{i=1}\sum^m_{j=1}[C[j]<=A[i]+B] i=1nj=1m[C[j]<=A[i]+B],即 n m − ∑ j = 1 m ∑ i = 1 n [ A [ i ] < = C [ j ] − B − 1 ] nm−\sum^m_{j=1}\sum^n_{i=1}[A[i]<=C[j]−B−1] nmj=1mi=1n[A[i]<=C[j]B1],即 n m − s o l v e ( m , C , − B − 1 , A ) nm−solve(m,C,−B−1,A) nmsolve(m,C,B1,A)。每次 A A A C C C 取模后互换位置,复杂度同欧几里德算法,为 O ( l o g C ) O(logC) O(logC)
(还有些需要补的)

DAY8

仅自己用的链接(file:///C:/Users/Belief、御风/Desktop/19.8.4)

第一题有些东西没考虑写挂了,0分。

第二题准备暴力拿分,于是就把暴力分拿完了,42分。

第三题做的时候心态爆炸,然后全部输出0,于是,0分。

总的42分,感觉其实第一题还是可以拿分的,就是自己没考虑完整,emmm。另外,这果然不是闹着玩的,不小心就要爆0掉rating什么的(虽然这次没有掉),今后要加油啊!

DAY9

仅自己用的链接(file:///C:/Users/Belief、御风/Desktop/19.8.5)

T1,T2打暴力打炸,T3打表都打炸了。

于是爆零,我自闭了。。。

DAY10

仅自己用的链接(file:///C:/Users/Belief、御风/Desktop/19.8.6)

三题全部敲了暴力代码(最暴力的),然后由于最后一题特判比别人多输出了一些东西,然后,运气爆发多过了一个点,于是超了好多人。

30、20、20,但分数还是不够啊,还要继续加油呢。

DAY11

仅自己用的链接(file:///C:/Users/Belief、御风/Desktop/19.8.7)

祝各位dalao七夕快乐!!!

跑题了跑题了…

T1挺简单的,但由于我太菜了,然后写炸爆0

T2暴力20分(本来想搞搞看70分的。。。)

T3有点难,40分挺满足了。。。

所以一共60分,还是低呀,要加油呢。

DAY12

仅自己用的链接(file:///C:/Users/Belief、御风/Desktop/19.8.8)

又是愉快的看ioiDAY2直播的一天

所以还是先说考试的事吧

T1、T2都不算难,但我又写炸,对自己感到绝望。。。

T3第一次做提答题,第二个点没更新到于是少了5分,得了33分emmm…

总共63分,但我又掉rating了,诶。。。

DAY13

仅自己用的链接(file:///C:/Users/Belief、御风/Desktop/19.8.9)

莫比乌斯反演

积性函数:
对于 ( a , b ) = 1 , f ( a b ) = f ( a ) f ( b ) (a,b)=1,f(ab)=f(a)f(b) (a,b)=1,f(ab)=f(a)f(b),那么 f ( x ) f(x) f(x) 为积性函数,欧拉函数就是积性函数,另外还有 d ( x ) = ∑ a ∣ x 1 , σ ( x ) = ∑ a ∣ x a , i d ( x ) = x , l ( x ) = 1 , e ( x ) = 1 = > x = 1 d(x)=\sum_{a|x} 1 , σ(x)=\sum_{a|x} a , id(x)=x , l(x)=1 , e(x)=1 => x=1 d(x)=ax1,σ(x)=axa,id(x)=x,l(x)=1,e(x)=1=>x=1

狄利克雷卷积:
两个数论函数 f ( x ) , g ( x ) f(x),g(x) f(x),g(x),令 h = f ∗ g h=f*g h=fg,那么 h ( x ) = ∑ a ∣ x f ( a ) g ( x a ) h(x)=\sum_{a|x} f(a)g(\frac{x}{a}) h(x)=axf(a)g(ax),易证满足交换律和结合律,两积性函数的卷积还是积性函数, f ∗ e = f f*e=f fe=f,注意,卷积不一定要求两个函数都是积性函数

莫比乌斯函数:
如果 F ( n ) = ∑ d ∣ n f ( n ) F(n)=\sum_{d|n} f(n) F(n)=dnf(n),那么 f ( n ) ∑ d ∣ n µ ( d ) ∗ F ( n d ) f(n)\sum_{d|n} µ(d)*F(\frac{n}{d}) f(n)dnµ(d)F(dn) F = f ∗ l = > F ∗ µ = ( f ∗ l ) ∗ µ = f ∗ ( l ∗ µ ) = f ∗ e = f F=f*l=>F*µ=(f*l)*µ=f*(l*µ)=f*e=f F=fl=>Fµ=(fl)µ=f(lµ)=fe=f,不要求 f f f 为积性函数

筛法:
时间复杂度为 O ( n ∗ l o g ( l o g ( n ) ) ) O(n*log(log(n))) O(nlog(log(n)))

线性筛法:

void xxsf(){
	v[1]=1;
	p[1]=1;
	for(int i=1;i<=n;++i){
	if(!p[i]){
		p[i]=i;
		s[++ans]=i;
		v[i]=-1;
	}
	for(int j=1;j<=ans&&s[j*i]<=n;++j){
		p[s[j]*i]=s[j];
		if(p[i]==s[j]) break;
		else           v[s[j]*i]=-v[i];
	}
}

思想是保证每个合数只被他最小的素因子访问到,时间复杂度为 O ( n ) O(n) O(n),但自带大常数,可以求出一个积性函数的值

另外的不多说了,看pdf。

下午的时候听了一下模拟赛的讲解

感觉还好。

DAY14

仅自己用的链接(file:///C:/Users/Belief、御风/Desktop/19.8.10)

t1暴力写炸

t2打表过了40分

t3根本不会

然后只有40分,感觉真的太菜了啊,被人家完虐啊。。。

DAY15

仅自己用的链接(file:///C:/Users/Belief、御风/Desktop/19.8.11)

t1纯暴力10分

t2不会

t3没时间看

总计10分,我我我又被完虐了。。。

DAY16

仅自己用的链接(file:///C:/Users/Belief、御风/Desktop/19.8.12)

我自闭了,所以去c班听dp。。。

斯特林数:
第一类:
n n n 个数的排列中有 k k k 个“环”的方案数, n n n 个人分配到 k k k 个圆桌上,圆桌旋转相等的方案数,即只关心每个人左边的人是谁, s ( n , k ) = s ( n − 1 , k − 1 ) + ( n − 1 ) ∗ s ( n − 1 , k ) s(n,k)=s(n-1,k-1)+(n-1)*s(n-1,k) s(n,k)=s(n1,k1)+(n1)s(n1,k)
第二类:
n n n 个数分成 k k k 个集合的方案数,集合不可区分, s ( n − k ) = s ( n − 1 , k − 1 ) + k ∗ s ( n − 1 , k ) s(n-k)=s(n-1,k-1)+k*s(n-1,k) s(nk)=s(n1,k1)+ks(n1,k)

欧拉数:
n n n 个数的排列,其中有 k k k 个满足 p [ i ] < p [ i + 1 ] p[i]p[i]<p[i+1] 的排列个数, e ( n , k ) = ( k + 1 ) + e ( n − 1 , k ) + ( n − k ) ∗ e ( n − 1 , k − 1 ) e(n,k)=(k+1)+e(n-1,k)+(n-k)*e(n-1,k-1) e(n,k)=(k+1)+e(n1,k)+(nk)e(n1,k1)

数位dp:
对十进制数或二进制数的某个统计,可能需要记录当前在第几位,上一个数字是什么,和题目有关的一些信息,当前位是否和限制相等,如果是多个整数,可能需要记录进位,错位等,当然还要注意前导零的问题

DAY17

仅自己用的链接(file:///C:/Users/Belief、御风/Desktop/19.8.13)

t1思考了一会,把特判全弄出来了,然后100分

t2调了好久还是炸了,0分

t3没时间写了,只敲了一个基本暴力,20分

总计120分,没有到预期成绩,策略不行啊。。。

下午有点懵逼。。。

DAY18

仅自己用的链接(file:///C:/Users/Belief、御风/Desktop/19.8.14)

背包dp:
n n n 个物品,每个物品有重量 w [ i ] w[i] w[i],求选出重量和不超过 s s s 物品集合的方案数,经典的有01背包(每个物品最多选一次),无限背包(每个物品可以选无数次),多重背包(每个物品最多选 k [ i ] k[i] k[i] 个),进阶问题看pdf吧

树形dp:
求直径,求每个点到其他点的距离之和,求每个点到其他点的最长路径,求树上一个点权和最大的独立集,求树上有几个大小不超过 k k k 的独立集

区间dp:
看一下pdf就好吗,全是经典题目

状压dp:
同上吧。。。

另外一些奇怪的、比较难的题目自己搜一下吧

DAY19

仅自己用的链接(file:///C:/Users/Belief、御风/Desktop/19.8.15)

向我们传授了一下经验。

感觉这几天效果挺不错的,但还有很多坑,还要好好消化。

好好吸收经验,今后要加油哦!

结束了呢。。。

你可能感兴趣的:(总结,集训)