2019金华正睿集训总结

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

DAY1

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

主讲概率与期望。

基础概念:
(概率与期望入门必备知识)
1、随机变量:有多种可能的取值的变量
2、P(a)P(a)P(a):事件aaa发⽣的概率
3、E(x)E(x)E(x):随机变量xxx的期望值,E(x)=∑P(x=i)∗iE(x)=\sum P(x=i)*iE(x)=P(x=i)i
4、独⽴事件:互相不影响的事件,满⾜ P(ab)=P(a)P(b)P(ab)=P(a)P(b)P(ab)=P(a)P(b)
5、对于独⽴事件,我们有 E(ab)=E(a)E(b)E(ab)=E(a)E(b)E(ab)=E(a)E(b)
6、当 0<x<10<x<10<x<1 时,∑i=0∞xi=11−x\sum^\infty_{i=0} x^i=\frac 1{1-x}i=0xi=1x1∑i=0nxi=1−xn+11−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、对于离散变量xxxP(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、有nnn个随机变量x[1…n]x[1…n]x[1n],每个随机变量都是从1…s1…s1s中随机⼀个整数,求max(x[1…n])max(x[1…n])max(x[1n])的期望
3、概率为ppp的事件期望1/p1/p1/p次后发⽣
emmm…
今天的话听课感觉还好,基本能听懂和理解但可能实际使用会emmm…毕竟我发现我代码能力有点菜。
所以还是在课后好好敲一下看吧。
然后…

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

还有鬼畜期望线性性练习题???:
1、给定 nnn 个硬币,第 iii 个硬币的价值为 w[i]w[i]w[i],每次随机取⾛一个硬币,获得的收益是左右两个硬币的价值的乘积,求期望总价值
2、有 nnn 个数 a[1…n]a[1…n]a[1n],每次等概率选出两个数,然后合并成一个新的数放回来,得到的收益是新的数的值,求总收益的期望
3、给定一个数列列 w[1…n]w[1…n]w[1n],随机一个排列列 hhh,如果 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、有 nnn 个⿊黑球,mmm 个⽩白球,每次等概率取出一个球(不放回),将取出来的球的颜⾊色写成一个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,mid][l,mid][l,mid][mid+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] 的出现次数,高度总结一个公式 lcp(x,y)=min(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)

组合计数。

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

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

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

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

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

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

之后就在讲杂题惹

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、每一条边有一个非负容量,即对于任意 EEE 中的 (u,v)(u,v)(u,v),有 c(u,v)>=0c(u,v)>=0c(u,v)>=0
2、如果 GGG 中存在边 (u,v)(u,v)(u,v),那么不存在 (v,u)(v,u)(v,u)。我们将图中不存在的边的容量定为0
3、图中含有两个特殊节点(源 sss 和汇 ttt
一个流可看作是从 V∗VV*VVVRRR 的映射,满足下面两条性质:
1、容量限制:对于任意的 u,vu,vu,v0<=f(u,v)<=c(u,v)0<=f(u,v)<=c(u,v)0<=f(u,v)<=c(u,v)
2、流量守恒:对于任何非源汇的中间节点 uuu,满足 ∑v∈Vf(v,u)=∑v∈Vf(u,v)\sum_{v\in V} f(v,u)=\sum_{v\in V} f(u,v)vVf(v,u)=vVf(u,v)

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

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

最大流的基本想法:
残量网络:
1、对于网络G,其残量网络G_f与G的差别在于每条边的边容量修改为G中边容 量减去当前流的该边流量。具体来说,cf(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中 当前流量,用于“反悔”时将流送回起点: cf(v,u)=f(u,v)c_f (v,u)=f(u,v)cf(v,u)=f(u,v)
增广:
f′f'f 为残量网络 GfG_fGf 上的一个流 (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、残量网络当中 sssttt 的一条简单路径
2、增广路 ppp 的流量定义为 cf(p)=min(u,v):(u,v)∈pc_f (p)=min{(u,v):(u,v) \in p}cf(p)=min(u,v):(u,v)p
3、若是将 ppp 上的每条边的流量均赋为 cf(p)c_f (p)cf(p),所形成的依然是满足条件的原图的一个流
结论1:
增广后流量增加,即令 fpf_pfp 为当前流f的残量网络中找到的一增广路,则 ∣f↑fp∣=∣f∣+∣fp∣>∣f∣|f\uarr f_p|=|f|+|f_p|>|f|ffp=f+fp>f
割:
为一个对于点集 VVV 的划分,将 VVV 划分为两个集合 SSSTTT,其中源点 sssSSS 中,汇点 tttTTT 中。对于一个流 fff 而言,割 (S,T)(S,T)(S,T) 间的网络流定义为 f(S,T)=∑u∈S∑v∈Tf(u,v)−∑u∈S∑v∈Tf(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∈Tc(u,v)c(S,T)=\sum_{u\in S} \sum_{v\in T} c(u,v)c(S,T)=uSvTc(u,v)
对一个网络而言,最小割为所有的割当中容量最小的那个
引理2:
由流量守恒导出,对于任意流 fff,任意割之间的网络流量不变,即 f(S,T)=∣f∣f(S,T)=|f|f(S,T)=f
结论2:
∣f∣=f(S,T)=∑u∈S∑v∈Tf(u,v)−∑u∈S∑v∈Tf(v,u)<=∑u∈S∑v∈Tf(u,v)<=∑u∈S∑v∈Tc(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)
最大流最小割定理:
对于一个网络 GGG,下面三个命题总是等价:
1、流 fffGGG 的最大流
2、当前流 fff 的残留网络 GfG_fGf 上不存在增广路
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的基础上,将增广路的过程优化为每次寻最短增广路的过程,其中路径长度定义为从 sssttt 需要经过的边条数
引理3:
在EK中,令 d(u)d(u)d(u) 表示残量单位网络上从 sssuuu 的最短路距离,那么对于 VsV_sVs 中的任意 uuu,在每次增广后 d(u)d(u)d(u) 不降
定理:
在EK算法中,增广的次数是 O(VE)O(VE)O(VE),所以复杂度为 O(VE2)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(VE)O(VE)O(VE)
3、for循环执行次数可分为只经过一次的和经过多次的
4、经过一次的复杂度之和为 O(E)O(E)O(E)
5、经过多次的次数之和为 O(VE)O(VE)O(VE)
6、因此加了左边所有优化的dinic总复杂度为 O(V2E)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(min(E12,V23))O(min(E^\frac {1}{2},V^\frac {2}{3}))O(min(E21,V32))
结论3:dinic在单位容量网络中寻找阻塞流可达O(E)复杂度
因此,在单位容量网络当中,dinic的时间复杂度可达 O(Emin(E12,V23))O(Emin(E^\frac {1}{2},V^\frac {2}{3}))O(Emin(E21,V32))
单位网络指对于 Vs,tV_{s,t}Vs,t 中的任意一节点,都满足下面两条之一
1、仅存在一条单位容量的入边
2、仅存在一条单位容量的出边
结论4:dinic在单位网络中效率可达 O(V12E)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 使得 ap−1≠1(modp)a^{p−1}\ne 1(mod p)ap1=1(modp),则 ppp 必不是质数。 然而有一些合数 ppp,满足所有与它互质的 aaa 都有 ap−1≡1a^{p−1}\equiv 1ap11 (mod ppp),这种数称为Carmichael 数(如 561=3∗11∗17),这样的数是用上面的方法检验不出来的。 所以还需要奇素数判定。对于奇素数 ppp,如果 ap−1≡1a^{p−1}\equiv 1ap11 (mod ppp) 即 (ap−12+1)(ap−12−1)≡0(a^\frac{p−1}{2}+1)(a^\frac{p−1}{2}−1)\equiv 0(a2p1+1)(a2p11)0 (mod ppp),由于 FpF_pFp 是整环, 所以 ap−12≡1a^\frac{p-1}{2}\equiv 1a2p11p−1p−1p1。如果 p−12\frac{p−1}{2}2p1 还是偶数则可以继续往下检验…用原根的一些理论可以证明这样就能保证对于任意合数至少 存在一个 aaa 可以判定它是合数。
其它还有印度人的AKS算法:
可以做到正确率 100% 的 O(logn) 复杂度。
但绝大多数情况 Miller-Rabin 都够优秀了。
质因子分解的方法:
试除法:
复杂度为 O(n)O(\sqrt n)O(n),太慢。。。
Pollard’s Rho(又名启发式分解):
期望复杂度 O(n4logn)O(\sqrt[4] nlogn)O(4nlogn)nnn 是素数的时候用Miller-Rabin素性测试,不是素数的时候,复杂度只和最小的质因子有关,所以称为启发式
假如要分解一个数 nnn,首先进行素性测试,是素数直接返回。 否则就要生成一些随机的 x[i]x[i]x[i],去求 gcd(∣x[i]−x[j]∣,n)gcd(|x[i]−x[j]|,n)gcd(x[i]x[j],n),如果它 ∈(1,n)\in (1,n)(1,n) 则找到了 nnn 的一个因子,递归分解。 一个挺靠谱的随机方法就是 x←x2+cx\larr x^2+cxx2+cccc 是个随机数。 这样随机出来的 xxx 可能会进入循环,假如进入循环了我们还没找到因子,就重新随个 xxxccc,重新做,可以证明 x←x2+cx\larr x^2+cxx2+c,形成的一定是一个 ρρρ 形结构。 每次当 iii222 的幂次的时候就令 y←x[i]y\larr x[i]yx[i],如果某时刻 x[i]=yx[i]=yx[i]=y 了则说明已经在环上绕了一圈了,这样“浪费”的步数仅仅是 O(环长)O(环长)O() 级别的。

数论:
欧几里德算法:
x∣a,x∣bx|a,x|bxa,xb,则 x∣(a+b)x|(a+b)x(a+b),于是 gcd(a,b)=gcd(b,agcd(a,b)=gcd(b,agcd(a,b)=gcd(b,a%b)b)b)
扩展欧几里德:
已知 a,ba,ba,b,求出 x,yx,yx,y 满足 a∗x+b∗y=gcd(a,b)a*x+b*y=gcd(a,b)ax+by=gcd(a,b),在欧几里德算法中递归地求,若已有 b=0b=0b=0,则 gcd=agcd=agcd=a,令 x=1,y=0x=1,y=0x=1,y=0,否则求出 x′,y′x′,y′x,y 满足 bx′+(a−a/b∗b)∗y′=gcd(b,abx′+ (a−a/b∗b)∗y′=gcd(b,abx+(aa/bb)y=gcd(b,a%b)=gcd(a,b)b)=gcd(a,b)b)=gcd(a,b)。 于是 a∗y′+b∗(x′−a/b∗y′)=gcd(a,b)a∗y′ +b∗(x′−a/b∗y′) = gcd(a,b)ay+b(xa/by)=gcd(a,b)
辗转相减(除)的其他用法:
只要一个环定义了带余除法,就可以在上面辗转相减(除),比如模合数的环、多项式环等等。比如求行列式模一个合数,根据行列式的性质可以把一行的倍数加到另一行上。辗转相减把其中一个位置消成0即可。比如求两个多项式的最大公约式,或者说多项式取模,可以不停地把一个的倍数加到另一个上,把其中一个多项式变成0。
类欧几里德:
solve(n,A,B,C)=∑i=1n⌊A[i]+BC⌋solve(n,A,B,C)=\sum^n_{i=1}⌊\frac{A[i]+B}{C}⌋solve(n,A,B,C)=i=1nCA[i]+B,如果 A>=CA>=CA>=Cans+=n(n+1)2∗(A/C)ans+=n(n+1)^2∗(A/C)ans+=n(n+1)2(A/C),然后 AAA%=C=C=C,如果 ∣B∣>=C|B|>=CB>=C,讨论下正负号算下,然后把 BBB 搞到 [0,C)[0,C)[0,C) 之间,设 m=⌊A[n]+BC⌋m=⌊\frac{A[n]+B}{C}⌋m=CA[n]+B,则要算 ∑i=1n∑j=1m[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],即 nm−∑j=1m∑i=1n[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],即 nm−solve(m,C,−B−1,A)nm−solve(m,C,−B−1,A)nmsolve(m,C,B1,A)。每次 AAACCC 取模后互换位置,复杂度同欧几里德算法,为 O(logC)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(ab)=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∣x1,σ(x)=∑a∣xa,id(x)=x,l(x)=1,e(x)=1=>x=1d(x)=\sum_{a|x} 1 , σ(x)=\sum_{a|x} a , id(x)=x , l(x)=1 , e(x)=1 => x=1d(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∗gh=f*gh=fg,那么 h(x)=∑a∣xf(a)g(xa)h(x)=\sum_{a|x} f(a)g(\frac{x}{a})h(x)=axf(a)g(ax),易证满足交换律和结合律,两积性函数的卷积还是积性函数,f∗e=ff*e=ffe=f,注意,卷积不一定要求两个函数都是积性函数

莫比乌斯函数:
如果 F(n)=∑d∣nf(n)F(n)=\sum_{d|n} f(n)F(n)=dnf(n),那么f(n)∑d∣nµ(d)∗F(nd)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=fF=f*l=>F*µ=(f*l)*µ=f*(l*µ)=f*e=fF=fl=>Fµ=(fl)µ=f(lµ)=fe=f,不要求 fff 为积性函数

筛法:
时间复杂度为 O(n∗log(log(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。。。

斯特林数:
第一类:
nnn 个数的排列中有 kkk 个“环”的方案数,nnn 个人分配到 kkk 个圆桌上,圆桌旋转相等的方案数,即只关心每个人左边的人是谁,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)
第二类:
nnn 个数分成 kkk 个集合的方案数,集合不可区分,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)

欧拉数:
nnn 个数的排列,其中有 kkk 个满足 p[i]<p[i+1]p[i]<p[i+1]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:
nnn 个物品,每个物品有重量 w[i]w[i]w[i],求选出重量和不超过 sss 物品集合的方案数,经典的有01背包(每个物品最多选一次),无限背包(每个物品可以选无数次),多重背包(每个物品最多选 k[i]k[i]k[i] 个),进阶问题看pdf吧

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

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

状压dp:
同上吧。。。

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

DAY19

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

向我们传授了一下经验。

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

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

结束了呢。。。

### 关于OI集训资料和训练计划 #### 集训资料推荐 对于想要参与OI竞赛的学生来说,选择合适的资料至关重要。以下是几类常见的OI集训资料: 1. **书籍** 经典的算法书如《挑战程序设计竞赛》[^1] 和《算法导论》可以作为理论基础的学习材料。这些书籍涵盖了数据结构、图论以及动态规划等内容。 2. **在线课程与平台** 可以利用一些知名的编程学习网站来提升自己的技能水平,比如洛谷、Codeforces等。通过解决平台上不同难度级别的题目,逐步积累经验并掌握各种算法技巧[^2]。 3. **历年真题解析** 学习过往比赛中的经典试题及其解答方法非常重要。例如,在提到的一篇关于2021年牛客OI赛前集训营的文章中指出,“单次Dijkstra的时间复杂度为 \(O((n+m)\log n)\)” 这一知识点可以帮助理解最短路径问题的有效解方式。 4. **总结文章** 来自其他参赛者的经验和教训同样宝贵。“OI集训总结”享了一位选手的心路历程:“为了不辜负这四年的OI学习生涯”,表达了坚持到底的决心;而另一份针对普及组的比赛总结则强调了实际操作过程中需要注意的具体事项,像“准备一个输入用的s数组,还有ans数组”的细节处理[^3]。 #### 训练计划建议 制定合理的训练计划能够帮助更好地备战OI赛事: - **短期目标设定**: 如果距离式考试仅剩下两个月时间,则需集中精力弥补短板领域的同时巩固强项。考虑到“文化课落了很多”,可能需要合理配每天用于ACM/OI练习与其他学业复习之间的时间比例。 - **专项突破**: 对薄弱环节进行针对性强化训练。如果发现自己在某些特定类型的题目上总是遇到困难(如贪心策略或者网络流),就应该多花些功夫去研究这类问题的特点及常用解决方案。 - **模拟实战演练**: 定期参加线上或线下的模拟测试活动,熟悉考场环境氛围,并检验自己当前的真实竞技状态如何调整后续备考方向。 ```c++ #include <stdio.h> int main(){ long long n; scanf("%lld",&n); printf("%lld", n&1?(n>>1)*((n>>1)+1):(n>>1)*(n>>1)-1 ); return 0; } ``` 上述C++代码片段展示了T2提取数字的一个实现例子[^4],从中可以看出简洁高效的编码风格也是成功完成任务的关键因素之一. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值