BUPT训练随笔(BUPT '21 WINTER #13: rng_58)
久违的开坑复习啦!
Problem A. 2016(在这里就写上K-magic题解好了)
是道有趣的题,是前两场比赛的题目的弱化版(K-magic)。我们可以发现,如果一个数x由<p的质因子构成,而且他是K-magic数,那么x*p^c仍然是K-magic,因为他们所有因子的系数都乘上了(c+1)。我们不妨从这个地方入手。
很“容易”发现,非K-magic数是很少的
那么我们就考虑筛出非K-magic数。我们一开始将1加入队列,然后依次枚举质数p,考虑新数列中,大于当前数x的因数的数有几个,如果>K,则不需要加入队列,否则继续加入队列,直到队列的数不在减少。我们发现当p不断增大的时候,加入一个比较大的质数p不会让数列发生改变,经测试,我们发现当p=293时,数列不会发生浮动。而非Kmagic数在5w左右,这样我们就本题处理的时候就可以直接输出第i个k-magic数。而对于K-magic本题,我们考虑二分。不妨假设我们枚举数列中的第i个数作为最后一个数,那么n必须>a[i]-i,这样才能在塞入i个非K-magic数,这样二分check即可。
Problem B. Airports
这题也是道神题。
考试的时候是用曼哈顿距离最小生成树的结论直接做的。这题直接8个方向换成最大生成树。但是这个做法我至今都不会证。
正解说是曼哈顿距离转换为切比雪夫距离,然后Boruvka 算法,用set维护,每次找.begin即可,复杂度大常数nlog 似乎也不难写
Problem C. Jump
这题同样是神题。
队友想的神奇结论www
我们考虑一下S->a->T发生了什么 假设2*a-S=T,那么2*a=S+T,或者是S=T,即0=T-S,那么不论s,t如何选择,我们总能看成0->|t-s|或0->t+s
那么只要跑一次最短路就好了,只是建图的时候我建的是-20000~20000,我也不知道有没有超出边界还能跑出答案的。
Problem D. Merge(不会.jpg)
搬来了题解(怎么复制过来只有latex...)
给定两个长度为 n 的排列 P,Q,求将他们归并后能够形成多少个本质不同的序列。
$n \leq 2 \times 10^3$。
题解
令 $f_{i,j}$ 为 P 中选了前 i 个数,Q 中选了前 j 个数,能够形成的本质不同序列个数。则显然可以由下面这个递推式得到:
$f_{i,j} = f_{i-1,j} + f_{i,j-1} - \sum_{k=1}^{\operatorname{lcp}(i,j)} f_{i-k,j-k} \times g_{k}$
其中 $g_k$ 是容斥系数。这相当于将两个长度为 k 的排列 $\{1,2,3 \cdots k\}$ 合并在一起,且不存在一个长度为 2i 的后缀满足能够表示为两个长度为 i 的排列 $\{1,2,3 \cdots i\}$ 合并在一起。注意到这就是卡特兰数,即 $g_k = C_{k-1}$。
拉一个卡特兰数的递推式:
$C_n = \begin{cases} 1 & (n = 0 \lor n = 1) \\ \sum_{0 \leq j < n} C_j C_{n-j-1} & \text{otherwise} \\ \end{cases}$
Problem E. Mirror Rice Cake
排序送分,应该没有人不会吧
Problem F. Number Cards
我们可以发现n个点所属区间的分类最多不超过n种,即数论分块,我们考虑每次数论分块后check,统计答案即可。卡卡常就可以过去了wwww每次for一遍n个点,找整除分块的最小分界点即可,这样复杂度是Onlogn*n*sqrt(1e9)
Problem G. Paint(不会!)
Problem H. Random Walk(暂留)
这题是神题啊!究极神题.jpg
我们可以先搞出n步都不重复经过格子的结果,然后再进行容斥。我们考虑一个格子重复经过两次是什么情况,那么无非就是走了一个长度为k的环,所以我们只需要统计这样的环的个数即可
我们先考虑如何计算出走长度为k且不重复的方案数fk
我们考虑辅助函数dk表示走k步回到原点,不考虑是否重复方案数
那么可以通过容斥f[i]=d[i]-d[j]*f[i-j]得到答案
最后经过ans-=fi*(n-i+1)(枚举环是从哪一步开始的)
即可获得答案
Problem I. Robots
这题是比较有趣的,首先显然可以离散建图,然后我们发现如果按照方向分解的话,最劣会出现n^2条边,我们考虑同一条线上的同一个方向的两个机器人,<-a....<-b显然a左边的点只需要连接到a即可,连接到b是没有必要的。那么边数就降到的On,直接最短路就完事了
Problem J. Ropes
prufer裸题,这么送分不会有人不会做把
Problem K. Stains
看完题解仍然觉得很神,还是留个链接吧
Problem L. String Modification
直接DP就完事了,反正巨简单
Problem M. Team Competition(不会)