ZJOI2019Round#1

考的这么差二试基本不用去了
不想说什么了。就把这几天听课乱记的东西丢上来吧

ZJOI Round#1

Day1 M.《具体数学》选讲 罗煜翔-宁波市镇海中学

上升/下降阶乘幂

差分和和式

差分类似求导;和式类似积分

下降幂多项式与下降幂级数

考虑如何计算两个下降幂多项式的乘积

如何处理下降幂多项式的点值?

下降幂级数在自然数处收敛,在其他数位置基本不收敛

点值的数量大概是阶乘级别的,考虑点值的指数生成函数

那么我们选取自然数生成点值。关于点值表示转系数表示,则是再多项式插值一遍。

有意思的是\(0\cdots n-1\)点值表示转系数表示是有特技的(1e5跑个3,4s就能跑出来了)

总而言之,如果题目给出连续点值那么往往出题人是利用了它的一些性质的,从这个角度就可以考虑下降阶乘幂多项式减少思维难度

【清华集训2016】如何优雅地求和

看到连续点值考虑转成下降幂多项式考虑。

期望dp练习题

题目大意:大小为\(n\)的数组,第\(i\)个位置,有\(p_i\)的概率为1;\(1-p_i\)的概率为0.求这个数组1的极长连续段长度的\(k\)次方和的期望。\(n\le 10^6,k\le 10\)

考虑长度为\(i\)的连续段的贡献。

有nlogn对任意给定点值多项式求期望的方法。

标算\(O(nk)\)

下降幂平移

题目大意:给定一个\(n\)次多项式在\(a\)处的各阶差分,求它在\(b\)处的各阶差分。\(n\le 10^6\)

类似的问题:已知\(n\)次多项式在\(a\)处的各阶导数,求它在\(b\)处的各阶导数。

听说\((a,b)\)的答案和\((0,b-a)\)答案是一样的……?(为什么任意多项式可以随便平移?)

Upd——此处的“平移”是指:因为本题给定的形式只是在\(a\)处的各阶差分而不是具体的多项式,也就是说我们只关心这个多项式的“形状”而不是相对坐标轴的方位。那么等价于考虑一个新的多项式(即原先的多项式平移之后的多项式)在\(0\)\(b-a\)的各阶差分。

Upd——另外一种更加形式化的理解:对于原多项式在\(a,b\)处泰勒展开,即\(f(x)=\sum{(x-a)}^i{{f^{(n)}(a)}\over{i!}}\)\(f(x)=\sum{(x-b)}^i{{f^{(n)}(b)}\over{i!}}\).记\(y=x-a\),后式也就是\(f(x)=\sum{(y+(a-b))}^i{{f^{(n)}(b)}\over{i!}}\)。也就是说有用的量只是\(a-b\),等于将多项式"平移"了一下。

对于a=0,前者相当于是一个下降幂形式。考虑下降幂的高阶差分.

斯特林数

可以使用上升/下降/普通幂定义斯特林数。

一个小例题:\(k\)次多项式\(f\)求逆,\(\mod x^n\)。最暴力做法\(O(nk)\).

第二个例题:\(k\)次多项式\(f\)开根,\(\mod x^n\)。记\(g=\sqrt f\),有\(g'=f'\times {1\over 2}{1\over \sqrt f}\).考虑从第\(m\)项得到\(m+1\)项。

第三个例题:\(k\)次多项式求\(e^f\),\(\mod x^n\)\(g'=f'g\)

这三个例题主要是为了防止被卡\(n\log n\)的做法

由递推式可以\(O(nk)\)处理出\((1..n,1...k)\)内所有的斯特林数。但是很多时候我们并不需要这么多数,\(O(nk)\)的复杂度也不能接受。

以下是六种常见需求:

第二类斯特林数——行

也即固定\(n\)的情况。

考虑处理\(x^n\),由于\(x^n\)是完全积性函数,所以可以用线性筛处理。

第一类斯特林数——行

相当于将\(x^\overline n\)

倍增处理。考虑把\(f(x)\)\(c\)处泰勒展开,问题变为多项式\(f(x)\)在c处的所有阶导数。类似前面的下降幂平移。那么就可以在\(O(n\log n)\)时间内求出\(f(x+c)\)的系数。

这里的多项式平移可以参见《算法导论》多项式的思考题。

第二类斯特林数——列

利用第二类斯特林数的组合意义:

第一类斯特林数——单个

进制转换

大整数n转为p进制。设n=a*10^k+b

第二类斯特林数——单个

需要将斯特林数推广到负数。

CC Feb18 Lucas Theorem

杂题选讲

Stern-Brocot树

如何在SB树上找一个数?通常二分做法可以被Fib数卡满成\(O(\log^2 n)\)。一种倍增拐点的做法可以达到\(O(\log n)\)

CTST2019 R1T1D1P2

题目大意:给定正整数\(n\ge 3\),构造两组长度为\(n\)的正整数等差数列,使得这\(2n\)个数两两不同且两组数的乘积相同。\(3\le n\le 50\)

观察小的\(n\)的最小解,会发下\(n=5,7,8\)时两个公差的中较小的都是\(2^n-1\),较大的是\(2^{n+1}-2\)\(n=6\)的时候只是进行了约分。

CTST2019 R1T2D2P6

题目大意:有数量无限面值为\(A,B\)的两种金币,求所有无法支付的物品价值的\(k\)次方和。\(1\le A,B\le 10^{18}\)

打表发现答案是不超过\(k\)次的含有\((A-1)(B-1)\)的多项式。

Day2 A.杂题选讲 孔朝哲-温州中学

Replicate Replicate Rfplicbte WF2017

如果没有变异的话,每一个状态就是唯一对应一个前驱。

逐行确定元素,出现非法就逐列确定非法位置;如果多次非法则是无解。

复杂度\(O(n^3)\)

Chip Game cf1033G

约定以下的\(A,B\)不按照题目AB顺序,而是\(A\le B\)。首先有第一步转化:记\(b_i=a_i\%(A+B)\),感性理解就是对于\(a_i>A+B\),每当\(A\)选择了\(a_i\)\(B\)就“跟上去”一定不会处于劣势。那么对于\({b_i}\),只要存在\(A<b_i\le B\),则\(A\)必胜。

Matches Are Not a Child's Play cf1137F

因为只有把点权变为当前最大点权的操作,那么也就是只有把一个点及它所有父亲放到操作序列最后这一种操作。

LCT/树剖可以维护这个操作,复杂度大概是\(\log^2n\)左右。

稍微再想了一想,这题可以:LCT;树剖+ODT;树剖+线段树维护等差数列。写了一篇题解是树剖+ODT的做法。

小A的昆特牌 牛客挑战赛30D

首先由插板法得到一个基本式子。

然后考虑这个式子的实际意义。

小A的多项式 牛客挑战赛30F

奇怪的数学题 51nod1847

分块

tower bzoj4657

奇妙的拆点建模

不等式 bzoj3284

image-20190325154454347

回文串

AC自动机

集合

联通期望 51nod1943

最短路计数 cf718E加强

Day2 M. 数据结构选讲 范致远-杭州学军中学

Problem A

对值域分块

K小值查询

对较大的数打一个减法标记,平衡树启发式合并。因为每次只有\((k,2k]\)的数才会被重新插入。

“大-魔-法-师”

对时间线段树分治去掉删除操作。一个点是叶子节点当且仅当1.是所有节点的LCA;2.它的子树内没有其他黑点。

抓fafa的qzh

离线做法:本题可以分解为一些子问题:求一个点和一个点集的LCA深度之和——LNOI2014LCA;区间加等差数列——cf446C. DZY Loves Fibonacci Numbers.

在线做法:树套树,定期重构树剖。标算是一个\(O(n^{5\over 3})\)的神仙做法。

Product on the segment

MOD是质数:处理前缀积和前缀积的逆元。

数据随机:分块,块内倍增或其他方法,期望\(O(1)\)

在线标算:将数组分为n/logn块,对于整块分治。块内套用以上做法。

Reverse Game

对于行建线段树维护区间连通性。每次修改之后对于修改的\(\log n\)个线段树区间暴力并查集对相邻行合并。

Problem B

首先考虑贪心,也即染了黑点\(x\)之后接下去是\(x+L\)前最后一个黑点。这样构成了一个树形结构,所求的就是第一个黑点到最后一个黑点的距离。可以用LCT维护。

动态树练习题I

动态树练习题II

对LCT所有点维护它虚孩子的点权和。

动态树练习题III

动态树练习题IV

AAA-tree 基于LCT的数据结构:实splay维护原节点;虚splay维护各个节点的出边。

一些补充:如何证明splay的复杂度;如何证明spaly的复杂度

动态树练习题V

链/子树加;链/子树第k大。强制在线.

考虑维护dfs序。块状链表维护区间移动。

Maximum Tree Path

余老爷实测A*能过

大sz的游戏

对参数建线段树,

Bridges

题目大意:动态维护边双

首先基操:对时间线段树分治去掉删除操作。

高复杂度大常数做法:新加的非树边会使覆盖到的树边不为桥边。(好像有一种写法:每当加进一条边构成一个环的时候,就删除删除时间最早的一条边。这个做法是一个\(\log\)的?)

小常数做法:考虑分治过程中有些信息是冗余的。暴力建出虚树下传。

LCT做法:

Problem C

线段树每个节点维护一个dfs序区间的直径

因为合并两个点集的直径可以做到\(O(\log n)\)\(O(1)\).

Count on a Treap

离线后用键值排序,

美好的每一天 不连续的存在

考虑点分树。对于每个点在与其相连的最远点分树上查询答案。

把每个不同颜色的区间放在平面上,那么问题转为在二维平面上询问单点被矩形覆盖的次数。

“旅行”

这题一共有三条轴:x,y,T.考虑将y作为时间轴处理。

镜中的昆虫

记录\(lst_i\),问题变为单点修改,区间询问小于x的数的个数。

cdq或者树套树维护

Travel Through Time

(2018多校第四场:赛时0Ac的题)

cjj当场秒掉

做法一:括号序列

把黑点所在的一个区间看做一个括号序列。Treap维护

Day2 A.随机算法 陈齐治-绍兴第一中学

最小圆覆盖

把所有点random_shuffle,期望复杂度\(O(n)\).

Ghd cf364d

rand一个数钦定它在答案集合内,然后判定。

题解链接

对称数 lydsy1805月赛

为每一个数值rand一个ull,检查链异或和是否等于\([l,r]\)内权值异或和。

Hongcow Draw a Circle cf744d

正经做法:\(O(n^2\log^2n)\)

考虑随机选取蓝点顺序,每次判定之前的最优答案。

决战圆锥曲线 uoj Round8B

非负整数这里有一个\(x_i\)的单调性在这里。

由于\(y_i\)是随机生成的,期望有用的权值个数为\(\log n\)

Dzy Loves Chinese II

参见【线性基 集合hash】uoj#138. 【UER #3】开学前的涂鸦

讲课时候主要讲了讲证明

胡策的小树

首先考虑没有“金坷垃”的情况。

直接二分做是\(\log^2\)的,random_shuffle金坷垃,先check之前二分的值可以做到一个\(\log\).

Pollard's rho algorithm

大数质因数分解。

全局最小割的karger-stein

算法流程:随机选一条边,把它的两端缩成一个点。然后重复n-3次,剩下把最后两个点之间的边集作为最小割。

这个算法的错误率是\(1\over n\),这里错误率\(1\over n\)指的是某一个全局最小割没有被找出的概率。

最小生成树

实现不太现实。

Filary bzoj3837

考虑\(m=2\),此时\(k\)至少为\(n/2\)。也就是每个数出现在最优解中的概率至少为\(1\over 2\)

同上一道Ghd

复杂度两个\(\log\)

向量内积 NOI2013

重点在于随机生成行向量p,目的是降低向量乘矩阵的复杂度。

共价大爷游长沙 uoj207

将权值异或在一条链上,新加入一条边的时候把原先环上的一条边删去。那么覆盖的权值就异或上删去路径的权值。查询的时候就和全局比较一下,因此不需要维护子树和,只需要普通的LCT。

巧克力 loj2977

第一问套路同模拟赛,随机化+斯坦纳树。

第二问考虑二分中位数,也即求权值和最小的

腾讯的星钻增值服务 2015计蒜之道复赛

同上一题套路,第一步映射为7种颜色,

土豆评测姬 北大集训D3T1弱化版

掉线了

posted @ 2019-03-27 17:03 AntiQuality 阅读(...) 评论(...) 编辑 收藏