Atcoder abc313
https://atcoder.jp/contests/abc313
F - Flip Machines
n张卡,正面ai,背面bi,初始都是正面
m个机器,对应卡xj,yj,!!xj可能等于yj
如果一个机器启动 则1/2几率 翻转卡xj,否则翻转卡yj
启动机器的集合任意选择
问 所有的 启动机器的集合 的方案中 卡的和
的期望值最大是多少
n 40
ai,bi [1,1e4]
m 1e5
2s
1024mb
我的思路
显然是个概率论的题
n 比较小,m中等,ai,bi中等
1 | 卡 a1 a2 a3 |
从频次的角度来看, 如果涉及到翻转,那么该位置的期望贡献就是 (a[i]+b[i])/2
如果不涉及翻转 那么期望贡献就是 a[i]
所以选取的集合 就算再多,也只和被激活的那些有关,和一个位置被选了几次无关
所以问题可以变为,基础 = sum ai,
di = (b[i]-a[i])/2
有一堆激活的pair可以任意选,
问 最大 di和为多少
把di 按照正(>=0),负(<0)分类
如果有 (+,+)的di pair则一定选, 如果有(-,-)一定不选
那么剩下的就是 (+,-)的
而这类如果 其中的+已经选了 则一定不选
所以变成了, 未被选的+,所有-
和很多(+,-)的问题
那么显然 至少一侧的个数 <= n/2 = 20
这就很像bitset了
如果 所有-的个数 <= n/2 那最简单, 就是贪心选掉所有(+,-)有-被选的正的里面的
如果 所有+的个数 <= n/2???
1 | (a0 10,b0 -5) |
只能说 最终被选的 -的个数肯定 <= n/2, 因为每个(+,-) 最多选一次
n-正 个中 选 <=正的方案数? 这有多大?
正=20时 2^20
正=19时 $2^{21}-\binom{21}{21}-\binom{21}{20}$
正=18时 $2^{22}-\binom{22}{22}-\binom{22}{21}-\binom{22}{20}-\binom{22}{19}$
1 | def binom(n,m): |
看输出 感觉 还是2s过不了
1 | 1 40 |