KEYENCE Programming Contest 2021
D
对于一个序列,相同的对数有\(2{2^{N-1}\choose 2}\),不同的对数有\((2^{N-1})^2\)
假设选了\(len\)个序列,那么应该满足:
\[\begin{aligned}
len\cdot 2{2^{N-1}\choose 2}=n\cdot {2^N\choose 2}\\
len\cdot (2^{N-1})^2=m\cdot {2^N\choose 2}
\end{aligned}\]
通过移项可得:\(n:m=2^{N-1}-1:2^{N-1}\)
将\(n=2^{N-1}-1\)或\(m=2^{N-1}\)带入上式,会得到\(len=2^{N}-1\),故这是\(len\)的下界(同时也说明\(2^{N}-1|len\))
我们通过构造一种方式,证明答案可以为\(2^{N}-1\)
第\(i\)个序列(\(i=1\sim 2^N-1\))
在\(j\)位置上(\(j=0\sim 2^N-1\)),若\(\text{popcount} (i\And j)\)为偶数则填'A',为奇数则填'B'
对于任意\(N\)长度的二进制,\(i\)仅缺失了\(0\),故容易证明这个构造满足\(n=2^{N-1}-1\),\(m=2^{N-1}\)
E
snuke在当前轮直接选取,那么状态会非常不好记录
我们保留snuke在之前轮,选择放弃暂时不选的次数,然后等蚂蚁走到这来了再选
虽然这个跟原游戏不同,但显然其不会优于最优解,也包含最优解
令\(f_{l,r,k}\)为\((l,r)\)全部被选了,snuke还可以选\(k\)次的最优解
两种转移方式(填表法):
- 满足\(k>0\),那么snuke可以选择\(l\)或\(r\),则用\(f_{l-1,r,k-1}+a_{l}\)或\(f_{l,r+1,k-1}+a_{r}\)转移
- 目前snuke不选择,则对手选择
那么用\(f_{l-1,r,k+1}\)或\(f_{l,r+1,k+1}\)转移(按照题意,这里的转移是固定的,取\(a_l,a_r\)中较大的一个)
F
感觉讲起来比较麻烦,就不写题解了...
code