省选模拟5

A. 青蛙

  每块石头都必须要踩一次,那么不难发现让最便宜的青蛙踩尽量多的距离超过d的石头,而其他青蛙尽量跳,跳不过去了直接从1跳到n一定最优。

  所以只要判断出最多可以让多少只青蛙跳过去即可,二分即可。

  然而没有开long long ,100->0。

B. 一起自习的日子

  暴力将伯努利数代入即可。

  前两天做了一道插值让我一直以为这道题是插值,然而后面有一个式子是关于$id$的多项式,然而d是一个常数,所以我以为这东西不是多项式。

  然而这东西确实是多项式。。。可以看作多于原多项式的拉伸,所以暴力插值也是可以AC的。

  考场最后试图推伯努利数,然而忘了计算自然数幂和的公式,所以没有推出来。

C. 字符串

  一个奇怪的思路:

  建出后缀自动机,处理出每个节点的lastpos,即最后一次出现的位置。那么当每个节点lastpos更新时,就可以用上一个lastpos更新当前位置的答案,可以用可持久化线段数实现这个更新。

  显然新建一个节点时会将一条祖先链的lastpos修改为当前长度,然而暴力做的复杂度可以被卡成$O(n)$,所以不是很可行。

  考虑使用LCT优化这个过程。若我们将当前节点access,那么就会将该点到根的链拉到同一条重链中,这启示我们可以保证一条重链中的lastpos相同。

  对于lastpos相同的节点,我们只需要关注长度的最大值,所以在splay中维护这个信息即可,在access过程中,将经过的重链对应的ans修改即可。

  实现起来细节很多。

posted @ 2020-01-13 06:24  tdcp  阅读(139)  评论(0编辑  收藏  举报