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\)中较大的一个)

code

F

感觉讲起来比较麻烦,就不写题解了...
code

posted @ 2021-01-17 19:31  Grice  阅读(340)  评论(3编辑  收藏  举报