时间安排
7:30–7:50 读题,T1貌似需要建图,T2 dp ,T3 神秘博弈。
7:50–8:40 T1,首先可以建图,然后可以发现许多优秀性质,发现题目要求实际上是在每棵树上选一条价值最大的链。问题在于如何取最大,一个想法是 dp ,但是这道题值域非常大显然不是这个方向,考虑到每单位的价值关于编号数指数级增长,考虑贪心选编号大的。手捏了几个例子发现没什么问题。但是细节貌似很多,还不是很清楚,先写后面的。
8:40–9:00 T3,对于 m=1 的点就是经典 nim ,可以 fwt 快速计算。然后感觉其他点都不太可做,就先弃了。
9:00–10:00 T2,首先有状压的分数。然后发现保留的数具有划分关系,可以区间 dp ,写完发现是 n^5 的,不太好优化。
10:00–11:40 T1,仔细想了想细节,要打好多标记,以及一些操作和贪心的点。实现完后反复检查了几遍。捏了几个数据都能跑过。
11:40–12:00 回看T2考虑怎么优化。
回顾反思
T1:
思路几乎是正确的,因为少考虑了一种情况导致挂了好多分。
花的时间有点长,当然有相当一部分是在想细节和枚举各种边界情况,效率应该更高些,留出更多的时间用于打磨数据和对拍。
T2:
比赛的时候光顾着怎么优化了,想着能不能把系数拆开什么的,忽略了一些更可写的点,正解则是直接找性质并更换了 dp 状态。
暴力 dp 考虑枚举 l,r,x 表示区间 [l,r] 内获胜的人为 x ,那么可以暴力枚举分界点以及两边获胜的人数转移。这是 n^5 的。
一个优化是若 x 在区间中间,那么其两边互不影响,于是可以直接用
d
p
l
,
x
,
x
dp_{l,x,x}
dpl,x,x 和
d
p
x
,
r
,
x
dp_{x,r,x}
dpx,r,x O(1) 转移了,那么需要高复杂度转移的对于一个区间只有 O(1) 个。于是变成了 n^4 。
复杂度在于对于两个留下来的选手 x,y ,需要考虑将 x,y 分开的一个分界点,考虑在 dp 中直接处理处相应所有分界点的答案和,于是可以改变 dp 状态,设
d
p
l
,
r
,
0
/
1
/
2
dp_{l,r,0/1/2}
dpl,r,0/1/2 表示一个区间 [l,r] 内左端点/右端点/两端点都存活下来的方案数,那么对于 x,y 其之间的贡献就是
d
p
x
,
y
,
2
dp_{x,y,2}
dpx,y,2 ,就可以快速转移了。
T3:
题意给出 n 堆石子,每堆有 ai 个石子,颜色为 ci,每轮要么选择一堆选取若干个,要么选择某种颜色的若干堆选取至多 m 个,不能不取,求先手必胜的情况数。考虑其 SG 。
发现每种颜色可以分别求 SG ,最后 xor 起来即可。
设某种颜色有 n 堆,第 i 堆有 ai 个,且
a
i
=
b
i
⋅
(
m
+
1
)
+
c
i
(
0
≤
c
i
≤
m
)
a_i=b_i\cdot (m+1)+c_i (0\leq c_i \leq m)
ai=bi⋅(m+1)+ci(0≤ci≤m)
那么其 SG 值为 :
(
⨁
1
≤
i
≤
n
b
i
)
⋅
(
m
+
1
)
+
(
(
∑
1
≤
i
≤
n
c
i
)
m
o
d
(
m
+
1
)
)
(\bigoplus_{1\leq i\leq n}b_i)\cdot (m+1)+((\sum_{1\leq i\leq n}c_i)\mod (m+1))
(1≤i≤n⨁bi)⋅(m+1)+((1≤i≤n∑ci)mod(m+1))
感性理解的话,可以发现该题实际上是 nim 游戏 与 bash 博弈 的缝合。
群友给出了一下貌似更严谨也不知道对不对的证明:
可以做一些博弈的题目找一找分析 SG 和博弈策略之类的感觉。