Codeforces Global Round 25
https://codeforces.com/contest/1951
G Clacking Balls(2s,256mb)
1~m篮子 顺时针 环
n个球,第i个在 篮子ai中,每个篮子至多1个球
alice 可以进行1s操作
[1,n]
等概率 选i- 如果 球已经不存在,则跳过(依然耗时)
- 如果 球存在,则沿着把球顺时针移动一个篮子,(如果目标篮子有球,把目标篮子中原来的球抛弃)
直到只剩下一个球停止,求操作时间的期望值 mod 1e9+7
n 3e5
n,m 1e9
我的思路
不能说没有想法,只能说一点想法也没有
如果一个球消失,那么说明有前面的球超过了它,换个角度 如果 球i移动 导致球j消失,也就是i走到j的位置,那么换成i消失是等价的后续,不影响概率
所以转换了题意的第三条(谁移动谁消失)以后
如果说 最后剩下的是 第i个球,那么这个球没有触碰下一个球,而前面的所有球触碰了后一个球
所以是个min/max 容斥+期望 吗?
计算每个球的 消失(触碰后面球)的期望次数,再min-max 容斥掉?
感觉也不对
再换个角度, 如果i留下
1 | [i-1 ................i] ..... |
没啥想法,总的来说,显然直接状态描述肯定不行的,不论是点坐标还是距离
那么要么就是孤立每个 间隔的期望什么的,要么就是孤立的什么点期望,总之需要一个办法把其中 关联的东西拆掉,
而且不只如此,还有环
然后就是考虑简化的问题, 同样是环,但是只有两个点
那么 Exp(state) = Exp(点的距离)
然而转化构成了 一个转化矩阵
$A\lambda=\lambda$的形式,已知$A$要求$\lambda$
另一个是展开环到无限的数轴,指定目标点,那么得到每个点的移动方案数?
题解
这题 的发想来自于一个4年前的 CF ROUND 641 Div1 D的一个戴江齐 的 评论
说白了 就是
$E(state)=1+\sum_{newstate} p_{newstate}E(newstate)$
然后“猜想,数学直觉”,认为$E(state)=\sum_i f(a_i)$, 而这个$f$是任何一个 满足上面 state转换的即可
这样找出任何一个满足上面转换的$f$以后就只需要
$ans = E(初始state)-E(结束state)=(\sum_i f(a_i))-(\sum_i f(end_i))$
剩余$k$个球时
令 $S=(d_1,\cdots,d_k)$ 为状态,记录所有点之家你的间隔
$D=\sum_{i} d_i$
对于第$i$个长度$\frac{1}{n}$ 概率, $d_i+=1,d_{(i+1)\mod k}-=1$, 如果后一个变为$0$ 从状态中删除这一项,把新状态记作$S_{+\lbrace i\rbrace}$
有$1-\frac{k}{n}$ 什么都不发生,(选中未被删除的球)
终点状态是 $S_{end} = (D)$
$E(S_{end})=0$, // 这里也可以不是0,换成一个新的函数H而不是期望,这样的话 只需要$ans = H(S_{start})-H(S_{end})$
$E(S)=1+\frac{1}{n}\sum_{i=1}^k E(S_{+\lbrace i \rbrace})+(1-\frac{k}{n})E(S)$
整理得到
$kE(S)=n+\sum_{i=1}^k E(S_{+\lbrace i \rbrace})$
$n=\sum_{i=1}^k(E(S)-E(S_{+\lbrace i\rbrace}))$
上 代江齐 的想法
如果存在 $E(S)=C+\sum_{i=1}^k\sum_{x=0}^{d_i} g(x)$
$n=\sum_{i=1}^k(E(S)-E(S_{+\lbrace i\rbrace}))$
$=\sum_{i=1}^k(g(d_{(i\mod k)+1})-g(d_i+1))$, 因为操作{i}
其余的都对应消除掉了,只多剩下$g(d_i+1)$和$g(d_{(i\mod k)+1})$
$=\sum_{i=1}^k(g(d_i)-g(d_i+1))$, 整理$i$
特别的,我们希望$(1,1,1) \to (1,2,0) \to (1,2)$时
希望 $E((1,2,0))=E((1,2))$
而左边多一个$g(0)$ 所以,最好$g(0)=0$
令 $g(d_i)-g(d_i+1) = \frac{n}{D}d_i$, 则满足上式$n=\sum_{i=1}^{k}(g(d_i)-g(d_i+1))$
$g(x)=g(x-1)-\frac{n}{D}(x-1)$
$g(x)=-\frac{n}{D}(\sum_{i=1}^{x-1} i)=-\frac{n}{D}\binom{x}{2}$
$E(S)=C+\sum_{i=1}^k\sum_{x=0}^{d_i} (-\frac{n}{D}\binom{x}{2})=C-\frac{n}{D}\sum_{i=1}^k\binom{d_i+1}{3}$
为了满足$E(S_{end}) = 0$
$0=C-\frac{n}{D} \binom{D+1}{3}$
$ans=E(S_{start})=\frac{n}{D}\binom{D+1}{3}-\frac{n}{D}\sum_{i=1}^k\binom{d_i+1}{3}$
H Thanos Snap(3s,512mb)
给定 $a[2^k]$ 初始是 $[1,2^k]$的一个排列
一个$t\in[1,k]$ 被展示给A和B
score = 在t轮后max(a)
每一轮
A:不操作或 选a中两个不同的元素交换, 希望score尽量大
B:a删除左半或右半,希望score尽量小
1 | for t=1..k |
$k \le 20$
我的思路
考虑 剩余轮数会怎么操作,g(a,剩余轮次)
如果剩余0轮,都不操作, g(a,0)=max(a)
如果剩余1轮,那么B一定会删除最大的数所在的一半,那么A的任务就是次大的数要和最大的不在同一半即可,g(a,1)=次大(a)=max(a,2)
用max(a,j) 表示a中第j大的
那么如果剩余2轮,那么B 一定是删除 左右中 max(a_left,2),max(a_right,2)更大的一侧,那么对于A来说,就是要让 max(a_half,2) 小的尽量大
然而这出现了分叉,无法直接判断是a的第多少大的了
1 | 1234 5678 |
感觉无法继续 更多的剩余轮次,因为这里的状态很复杂了
另一个角度想就是如果最优为$x$, 我们能否让结果 $\ge v$, 显然在不改变Alice和bob的决策情况下,这是单调的可以二分
那么 以$v$为分界点,Alice和Bob的决策在 新的视角下会怎样
把 $\ge v$的全换成1,$< v$的全换成0
那么, 原来的“最优操作”实际上,Alice和Bob博弈下来就是留下1的个数,而分界点$x-1,x$ 上分别是留下1个1,和完全不留1
所以 原题目 变化为(总感觉数学上没有完全证明这两个等价,但是感觉上是这样的?)
Alice要尽可能保留1,
Bob要尽可能移除1
但这 也注意到 这似乎没有局部贪心?
1 | 11111111 00000000 10101010 1010000 |
而3次操作来说,
1 | 11111111 00000000 10101010 1010000 |
所以3次操作来说 已经说明了,Alice如果只是简单的平衡左右1的个数的话,显然是没有局部最优性的
但如果只有1次操作,那么alice就应该直接平衡成 左右都是7个了
这里说明了最终次数t也影响 他们的决策
没啥想法,一个想法是直接暴力
也就是 f(状态,次数)=true/false(能否留下1),而这里状态可能需要一个长度幂次标识
所以大概是 O(k^2 2^k)的状态
然后转移的话 最多 (k/2)^2 (把1移动到0)种
这样感觉就TLE了
如果只看状态的话$k^2 2^k$ 似乎还可以卡一卡,特别是 这里长度标识应该是标不满的
$\sum_{i=1}^{20} i 2^i = 3984,5890$
所以 如果转移能 优化效率那就更好了
1 | f(s)=f(s_left+s_right) |
感觉这样的话,不知道是TLE还是卡着时间线能过?
1 | 再整理 |
题解
一样的二分转化
只是变成了 t+1层的树,Bob从根向下走,而Alice可以交换数组中两个位置的值
- 叶子节点对应长度$2^{n-t}$的 数组区间
- Alice要做的就是 让最后到达的叶子对应的区间里有1
- Bob就是要让对应区间里没有1(记作 deficient 叶子)
- 那么有多于1个1的leaf可以贡献额外的1
- 如果 在走到节点p时的操作,在p的任意祖先节点也可以操作,
- 这个观察,让我们考虑 从下向上思考
- 记录 每个节点 对应的 deficient 叶子个数和可以借用的额外1的个数
- 那么 如果当前位置的 (deficient,可借用) 都非0,则完成1次转移,并把剩余的向上传递
- 那么 alice 需要在 根部时 为deficient=0 才能获胜
总结
VP了这场(5198分 大概2172的表现(如果实际打会掉分)),前面题卡了有点久,还WA了一发D
A(7min)
B(19min)
C(38min)
D(51min), WA+1
E(32min)
F(62min): 超时29min 自己做出来了
G:
戴江齐 大佬的这个数学直觉法,简单暴力有效啊!!
像待定系数法的感觉,又很帅,而且这里 拆g的时候 拆成从0到di的和 也很有意思,这样变成2次类和的话, 转换时不会剩余4项而只会剩余2项
我也把 round 641 D的题解文字补了
H:
一样的二分转化,但是后续的 树型没建立出来,在想记忆化DP,
而这个树型转化,其实核心还是引出了倒着想的(自下向上的想法)
I: TODO
对我来说,H看上去 比G简单,二分很自然,这个树型转化自己也应该要能想到的。哎。
不过H的收获很大,感觉概率论如果有这个方法的话,似乎能搞的题增多了不少,但其数学原理感觉还是不透彻,因为还是有可能制造出的表达式虽然满足但是过于复杂产生过拟合一样的效果吗???