2023.01.06 模拟赛小结

更好的阅读体验戳此进入

今天的题是 sssmzy 组的,他的题居然有一道签到,真的,我哭死。

这次模拟赛没有太寄。

赛时思路

T1

CF359B Permutation

要求你构造一个序列,满足对应条件。具体条件略。

比较简单,构造方案很多且均不难想到,总之简单想一下就知道了,妥妥的签到题。

Code

checker

T2

LG-P4884 多少个 1?

给定 m,k,求满足 111111k(modm)(共 n1)的最小 n

读完题之后想到的思路是把所有 1 拆分为 10n1+10n2++100,于是问题就转换为了对每个数取模之后加起来再取模,然后通过欧拉定理将幂次对 φ(m)=m1 取模即可,这样的话就是 [0,m2] 循环,循环长度为 m1,然后记录一下 10imodm(i[0,m2]) 的值即可,这样时空复杂度都是 O(n) 的,唯一有一个问题就是不知道会循环多少次,虽然结论似乎是 nm 的,不过总之赛时我用了一个类似卡时的思路去限定了一下。无论如何最后 m5×107 的部分分过了,最终 60pts

Code

T3

CF494C Helping People

有一个长为 n 的数列,初始时为 a1..n

给你 q 个操作,第 i 个操作将 [li,ri] 内的数全部加一,有 pi 的概率被执行。保证区间不会交错。

求操作完成后数列的最大值的期望。

一眼没什么思路,糊了个暴力 20pts 跑路。

Code

T4

COT3 - Combat on a tree

Alice和Bob在一棵n个节点的树上玩游戏。每个节点最初都是黑色或白色。 他们轮流执行以下操作: 从当前树中选择一个白色节点v,将路径(1,v)上的所有白色节点都变为黑色.最后操作的玩家获胜.爱丽丝先手。当他们都使用最佳策略时,求是否能够必胜,并求出第一步的方案.

树上博弈论,较为阴间,赛时感觉暴力过于麻烦就没写,实际上这题的暴力精细实现的话也没有太麻烦。

正解

T2

尝试进行转化,对 LHSLHS×9+1 即可转换为 10 的幂,即:

10n9k+1(modm)

然后套一下 BSGS 模板即可。

依然可以不使用光速幂,最终复杂度 O(mlogm)

注意过程中部分需要使用 __int128_t

Code

T3

有一个很高妙的转化,即因为区间无交错,所以考虑将所有操作区间抽象成森林的结构,可以加一个操作 [1,n] 但概率为 0,这样可以保证结构为树而非森林。

转化之后就是经典的 树形DP 了,首先一个较为显然的状态就是 dp(p,i) 表示 p 子树中最大值为 i 的概率,发现难以转移,于是考虑设 dp(p,i) 表示 p 子树中最大值 i 的概率,这样易于转移但第二维状态过多。不难发现最大值一定不小于序列本身的最大值,并且不大于最大值加上 q,所以考虑修改状态为 dp(p,i) 表示 p 子树内最大值 maxp+i 的概率,于是转移显然,对于节点 p 加上其最大值减去子节点最大值,然后考虑 p 的操作是否执行即可。

dp(p,i)=Pp×usonpdp(u,i+maxpmaxu1)+(1Pp)×usonpdp(u,i+maxpmaxu)

对于没有子节点的点自然为 dp(p,i)=Pp+(1Pp)=1

最终答案即为枚举所有 i,由于建树时需要排序,排序后根节点应为 1 那么答案即为 i=0q(dp(1,i)dp(1,i1))×(max1+i)

同时需要注意对于 dp(p,0),其应为 (1Pp)×usonpdp(u,i+maxpmaxu)

Code

T4

 

Code

UPD

update-2022__ 初稿