很水的一场。
C Pokémon Army
设 a n + 1 = 0 a_{n+1} = 0 an+1=0,那么答案就是 ∑ i = 1 n max ( 0 , a i − a i + 1 ) \sum_{i=1}^{n} \max(0, a_i - a_{i+1}) ∑i=1nmax(0,ai−ai+1)。于是交换就能 O ( 1 ) O(1) O(1) 维护。
D Rescue Nibel!
简单组合数。
E Battle Lemmings
设 1
有
t
o
t
tot
tot 个。那么答案只和新串中每一段 0
的个数有关。即答案为
n
(
n
−
1
)
2
−
t
o
t
(
t
o
t
−
1
)
2
−
t
o
t
(
n
−
t
o
t
)
−
∑
(
l
i
2
)
\frac{n(n-1)}{2} - \frac{tot(tot - 1)}{2} - tot(n-tot) - \sum \binom{l_i}{2}
2n(n−1)−2tot(tot−1)−tot(n−tot)−∑(2li)
其中
l
i
l_i
li 为第
i
i
i 段连续 0
的长度。我们希望最小化最后一项。
设
f
(
i
,
j
,
k
)
f(i, j, k)
f(i,j,k) 为分配好原串的前
i
i
i 个 1
,第
i
i
i 个 1
放在新串的
j
j
j 位置,且移动步数为
k
k
k 时,最后一项最小是多少。那么有
f
(
i
,
j
,
k
)
=
min
0
≤
t
<
j
{
f
(
i
−
1
,
t
,
k
−
∣
p
o
s
i
−
j
∣
)
+
(
j
−
t
−
1
2
)
}
f(i, j, k) = \min_{0 \le t < j}\left\lbrace f(i-1, t, k - |pos_i - j|) + \binom{j - t - 1}{2}\right\rbrace
f(i,j,k)=0≤t<jmin{f(i−1,t,k−∣posi−j∣)+(2j−t−1)}
其中
p
o
s
i
pos_i
posi 为原串第
i
i
i 个 1
的位置。
时间复杂度为 O ( n 5 ) O(n^5) O(n5),但跑得很快。
小结
本来 E 应该能在比赛时交上去的,结果还是怂了,写了错误调不出来。
还是抗压能力不行。