KEYENCE Programming Contest 2021

D

对于一个序列,相同的对数有(2{2^{N-1}choose 2}),不同的对数有((2^{N-1})^2)
假设选了(len)个序列,那么应该满足:

[egin{aligned} lencdot 2{2^{N-1}choose 2}=ncdot {2^Nchoose 2}\ lencdot (2^{N-1})^2=mcdot {2^Nchoose 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=1sim 2^N-1)
(j)位置上((j=0sim 2^N-1)),若( ext{popcount} (iAnd 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

原文地址:https://www.cnblogs.com/Grice/p/14289881.html