多校A层冲刺NOIP2024模拟赛25

多校A层冲刺NOIP2024模拟赛25

前言

唐了,T2重构了两遍,但把一开始的代码调整一下便可通过,唐到用一个有4种取值的vis分讨。😡

签,bitset。

题解是用long long将 m 状压,感觉不如 bitset 🤓

序列

先考虑确定了有哪些操作后怎么做,显然最优的顺序是先赋值,再进行加法,最后乘法。

现在考虑如何将所有操作统一起来一起维护。

对于赋值,肯定只会赋值一次,所以直接处理出来即可,ans=ans×yaiai=y

对于乘法,直接乘即可 ans=ans×y

对于加法,肯定要先加大的,所以每个 i 肯定是从大到小依次加入 ans=ans×ai+yaiai=ai+y,此处的 ai 表示 ai 在当前的值(算上已经计算过的加法与赋值操作)。

所以每次便是乘上一个数 k

t={yai,t=0ai+yai,t=1y,t=2

用优先队列维护即可。

先考虑一棵树。

很容易求出在 root=1 下所有点的输赢情况。

考虑接入一颗树,由于是同一颗树,所以可以在原树上直接考虑 (后话)

当我们接入一个根为必败的树时,接入的点一定会变为必胜点。

接入必胜点时,对任何点都没有影响(因为不会有人想要走这里)。

所以设 dpi,0/1i 子树内接入一棵树后这个点必输/必胜的方案数。

但是我们接入一个树,这棵树的根不一定是原来的根,所以需要对每一个点都求出以这个点为根的 dp 值。

所以需要换根(后面再提,先说思路)。

现在将问题扩展到D颗树,由于每次都是相似的转移,所以可以从后向前求答案。

我们设 sum0 为所有(当前考虑到了的所有树)的必输方案数(为根),sum1则为必胜。

cnt0/1 为单个树中必输/必胜的点的数量。

sum 的转移可以枚举后缀和与当前的树的情况。

  1. 连入一个必输的根 sum0=sum0×dpi,0sum1=sum0×dpi,1
  2. 连入一个必胜的根,都不变,连在任意处都可以 sum0=sum1×cnt0sum1=sum1×cnt1

发现可以直接使用矩阵快速幂维护。

转移矩阵:

|sum0sum1|×|dpi,0dpi,1cnt0cnt1|

好了,最后就是如何换根了。

对于一个点,枚举儿子进行转移。

如果这个点没有任何必输点或当前的儿子就是它唯一的必输点,则它无法进行必输转移,因为还有其他的必输点。

否则,儿子的输赢根本不用管。

换根的话直接将父亲放在它儿子,像儿子一样处理即可(有空再补吧,希望我还能记得这个逆天东西)。

然后在回溯回去就行了。

字符串

严格小于 T3,线段树维护相邻字符的数量,答案就是逆序对个数 +1。

后记

感觉整场都在打T2,有点失败,希望最后几场模拟赛能再提升提升实力。

posted @   碧蓝新星  阅读(42)  评论(3编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示