「考试」省选5

这套做的比较顺。
题也很好。

T1
一个简单的贪心。
我们二分能够无伤通过的蛤个数。
check就用之前用烂了的队列来check。
然后我们知道无伤通过最多一定对应这所有的石头被踩完,因为这样可以让每只蛤单次跳跃距离的最大值尽量的小。
这也就是说两种最优操作是合在一起的,有点像\(CSP-2019 D2T2\)。
那么,二分出来剩下的就是必然要跳出大于\(D\)的了,我们取最小的几只,让他们一步从\(1\)跳过去。
另外一种情况是没有蛤可以无伤过。
这时候就让最便宜的那只去踩地雷,踩过所有的石头,然后剩下的直接跳过去就可以了。

T2
简单的推式。
我们要求的是:
\[\sum\limits_{i=0}^{n}\sum\limits_{j=1}^{a+id}\sum\limits_{l=1}^{j}l^k\]
\(k\in[0,3000],n,a,d\in[0,123456789]\)。
这样只能够把复杂度转成\(O(K^2)\)的。
稍微推一下,设\(B_i\)为伯努利数第\(i\)项。
那么:
\[\sum\limits_{i=0}^{n}\binom{n+1}{i}B_i^{-}=0\]
求出\(B^{-}\)后求\(B^{+}\)
\[B_i^{+}=(-1)^iB_i^{-}\]
一下令\(B_i=B_i^{+}\)
关于自然数幂和的式子是:
\[\sum\limits_{i=1}^{n}i^k=\frac{1}{k+1}\sum\limits_{i=0}^{k}\binom{k+1}{i}B_in^{k+1-i}\]
然后就可以直接拆式子了。
\[\begin{aligned}
ans&=\sum\limits_{i=0}^{n}\sum\limits_{j=1}^{a+id}\sum\limits_{l=1}^{j}l^k\&=\sum\limits_{i=0}^{n}\sum\limits_{j=1}^{a+id}\frac{1}{k+1}\sum\limits_{l=0}^{k}\binom{k+1}{l}B_lj^{k+1-l}\&=\frac{1}{k+1}\sum\limits_{l=0}^{k}\binom{k+1}{l}B_l\sum\limits_{i=0}^{n}\sum\limits_{j=1}^{a+id}j^{k+1-l}\&=\frac{1}{k+1}\sum\limits_{l=0}^{k}\binom{k+1}{l}B_lg(k+1-l)\g(l)&=\sum\limits_{i=0}^{n}\sum\limits_{j=1}^{a+id}j^l\&=\sum\limits_{i=0}^{n}\frac{1}{l+1}\sum\limits_{k=0}^{l}\binom{l+1}{k}B_k(a+id)^{l+1-k}\&=\frac{1}{l+1}\sum\limits_{k=0}^{l}\binom{l+1}{k}B_k\sum\limits_{i=0}^{n}(a+id)^{l+1-k}\&=\frac{1}{l+1}\sum\limits_{k=0}^{l}\binom{l+1}{k}B_kf(l-k+1)\f(r)&=\sum\limits_{i=0}^{n}(a+id)^{r}\&=\sum\limits_{i=0}^{n}\sum\limits_{j=0}^{r}\binom{r}{j}a^j(id)^{r-j}\&=\sum\limits_{j=0}^{r}\binom{r}{j}a^jd^{r-j}\sum\limits_{i=0}^{n}i^{r-j}\&=\sum\limits_{j=0}^{r}\binom{r}{j}a^jd^{r-j}h(r-j)\h(p)&=\sum\limits_{i=0}^{n}i^{p}\&=[p=0]+\sum\limits_{i=1}^{n}i^{p}\&=[p=0]+\frac{1}{p+1}\sum\limits_{k=0}^{p}\binom{p+1}{i}B_in^{p-i+1}\\end{aligned}\]
\(O(n^2)\)求出\(h,f,g\)然后分别回代即可。
注意特判掉\(p=0\)的情况。
模数加一次就爆int??

T3
\(SAM+LCT\)
好题。
我们用\(LCT\)维护\(lastpos\)。
然后写一个可持久化线段树来维护答案。
对于每条实链来说,他们的\(lastpos\)都是相等的,我们用他们中\(len\)最大的来更新答案数组。
因为在\(access\)的时候这一条链上的点都是这个位置的字符串的重复出现。
我们在加入一个新节点的时候,在\(access\)的过程中,首先把每条实链中的所有的部分的\(len\)的最大值加入到这条实链的\(lastpos\)上就可以了。
然后由于要保证每条实链的\(lastpos\)时刻相等。
我们发现在\(link\)的时候会进行 \(lastpos\)赋值操作,而\(cut\)则不会。
所以我们的\(cut\)不能调用\(access\)函数,防止将不同\(lastpos\)的实链串联起来。
这样的话维护\(SAM\)的\(parent\)树该怎么做呢?
我们不\(cut\),而是直接把\(nq\)怼进树里。
具体来说。
我们找到\(q\)所在\(splay\)的前驱,然后把其前驱的右儿子变成\(nq\)即可,多打几个特判就行了。
然后查询的时候二分答案。
只需要判断第\(r\)棵可持久化线段树中的\([l+mid-1,r]\)区间中的最大值是否是比\(mid\)要大就行了。
时间复杂度的话,由于\(access\)的均摊复杂度是\(O(nlogn)\)的,而可持久化线段树的修改是\(logn\)的。
那么时空都是:\(O(nlog^2n)\)

原文地址:https://www.cnblogs.com/Lrefrain/p/12182321.html

时间: 2024-08-30 17:28:25

「考试」省选5的相关文章

「考试」省选模拟13

在家的又一场. 状态还是一般吧. 自己扔了30分. T1 比较厉害的\(dp\),考场上想到了,结果因为细节太多就没有写(真的是多). 他其实就是个基环树dp. 我们首先断掉环上某个边,然后进行一次最大匹配的\(dp\),然后这样要求这个边必然不选. 另一种情况是这个必然选,那么这条边终点的出边必然不选,再次断那个出边 再\(dp\)一次得到答案. 考虑如何输出方案. 对于一个位置我们记录这个点的最大值出现在\(0/1\)上. 然后根据这个找到最佳方案所依赖的子节点方案. 即可输出方案了. T2

「考试」省选7

比较简单的一场,但是我好像做的xibalan. 上来看了一小时题啥也不会. 然后发现\(T2\)数据范围像是分块. 然后傻逼一样去打根号算法. 最终结果当然是死了,到九点半也没写出来. 然而早就会\(T1\)正解了,于是先五分钟拿了\(T3\)的30分(为啥60那么好打..). 然后半个小时打完\(T1\)(临接表被卡常到90?) 然后继续搞T2最后弄出来了. 剩下十分钟啥也没干,三分块长从\(12s\)变成了\(2s\). T1 原题,\(xor\)差分之后就没了. T2 数据结构题毫无思维难

「考试」省选模拟12

状态不好考的不行(x 还是在家里不够专注吧(? T1 一个简单的离散化+bfs 细节不少 一个区间直接把两个端点都离散进去就行了. 统计答案的时候按块统计答案. T2 减枝的搜索. 不是特别难. 发现其实格子并不是很多. 被\(K\)给限制住了. 太多的都是0. 那么\(n+m-1\)的大小必然是小于等于10的. 直接爆搜. 剪枝要用到一个小技巧. 当前如果许多个颜色并没有放过,那么我放上一种颜色搜索一下得到答案,那么这几个颜色是等价的可以直接不重复搜索,然后将答案乘上个数. T3 挺厉害的\(

「考试」省选22

... T1真的我方了. T1 计算几何. ... 不管我用什么方法都\(A\)不了. 不管是用正弦定理余弦定理还是别的什么. 咕了. T2 简单的差分+马拉车. 先用马拉车处理出以每个位置为重心的回文串的长度. 然后处理出两个数组,\(st[i],ed[i]\). 分别表示以这个点为起点的回文串的终点的总和,以这个点为终点的回文串的起点的总和. 然后可以认为相当于是离线对数组加一个公差相等的等差数列,记录一下当前有几个数列以及首项的和即可线性差分了. 那么答案就是: \[ans=\sum\li

「考试」省选23

好难啊... T3 讲了一次了,不过似乎大家都没有听懂. 详细的复读一次. 这个题是构造题. 首先题意转化. 我们发现一个\(E\)的序列的形成过程中任意时刻的图都可以对应为一个大小为\(i\)大强连通分量和\(n-i\)个单独的点的形式. 因为只有一个强连通所能到达的状态是最多的,这样我们求出这种图的方案就是\(E\)序列的方案. 然后设\(dp[e][i]\)为大强联通有\(i\)个点,总共有\(e\)条边的方案数. 转移很简单,枚举一个新圈即可: \[dp[e][i]=dp[e-1][i]

「考试」省选27

好像很迷? T1 很奇怪的期望. 根据那几个条件可以发现,概率最终会收敛到精度以下. 我们只需要迭代足够的轮次即可. T2 暴力的\(O(n|S|2^n)\)都过了... 奇怪. 发现答案是求并集,考虑基础的并交容斥. 设\(g(S),S\subseteq A\)为\(S\)中的所有的情况中\(S\)的所有串的公共前缀长度*这种情况发生的方案数. \(P(S)=\),\(S\)中的问号个数. 那么\(g(S)\)对全局的贡献是\(g(S)2^{P(A-S)}\) \[ans=\sum\limit

「考试」省选37

今天的题超极棒. T1 汉诺塔问题. 我们考虑把汉诺塔想象成一颗搜索树. 然后在上面找到当前的某一步就相当于递归到最底层. 然后中间判一下合不合法,如果走右儿子就加上左边的贡献就行了. 大概是个noip题... T2 设函数\(next(n,k,s)\)为大于等于\(n\)的\(k\)进制数中,各个位和为\(s\)的最小正整数. 这个玩意可以用一个数位\(dp\)实现,复杂度是\(O(klogn)\),判断一下剩下的位置的最大和是否大于剩下的\(s\)即可. 然后有了这个函数之后我们就可以做了.

「考试」省选56

直接全都WA爆了. T1 博弈论模型,其实就是转化成\(xor\)和为\(0\). 我们考虑朴素的\(dp\),\(dp[i][j][k]\)设为前\(i\)个元素,去掉的元素个数\(mod\ d\)为\(j\),\(xor\)和为\(k\)的方案. 暴力转移即可. 考虑最终答案是\(dp[n][0][0]\) 我们降序排序\(\{a\}\) 那么如果\(upbit(a_i)=2^j\),说明转移过来的\(k\)必然是小于\(2^{j+1}\)的. 这样我们转移的时候就可以指转移\(2^{j+1

「考试」省选61

T1 dy讲的原题. 建议去翻\(DC\)大神的\(dp\)视频课. T2 结论题. 一种想法是抽象为一个\(ans+1 n\)的矩阵. 每次从上面一段连续区间向底层走. 维护每一个位置最高的高度是多少就可以得到答案了. 这里用一个队列实现. 每一个位置的队列长度可以用来更新答案. T3 生成函数题. 考虑容斥. 用走了几条输入边来容斥. 设\(dp[i][s]\)为当前在\(i\)点,经过的点集为\(s\)的方案数. 设\(f[s]\)为经过的点集为\(s\)的方案数. 设\(g[i][s]\