时间安排
8:20–9:20 T1 50 分部分分可以直接 n^2 DP ,T3 的 40 分可以直接状压。T1貌似可以拿 70 。
9:20–9:30 看了一眼 T2 ,暂时没想法。暴力分直观上很难写而且只有 10 分,先写 T1 的70 .
9:30–? T1的70 ,由于都是2 的幂,可以直接枚举最大公约数,然后分别 dp ,细节一堆。有个显然的性质是,固定一个端点后,区间 gcd 最多变化log次,可以划分为 log 个段。考虑包含一个数的段,那么要维护一堆前缀和,如果能够用动态开店线段树维护,最多大概有 nlog - nlog^2 个结点,但是维护这log个段貌似有些困难。
?-13:00 T3,发现如果枚举一对逆序对,相当于增加了一条拓扑关系,可以每次计数累加。但这样是个仙人掌计数,以前貌似遇到类似的,这样大概有 80 分左右,尝试去写,然后 fail 了。
回顾反思
T1:这道题一个简化的关键点是把考虑包含某个点的段变成有多少种情况不包含,这样就由考虑一个区间变成只考虑某个点两边的前后缀了,前后缀是好做的。其次是观察 dp 过程的性质,发现那 log 段不仅是 gcd 相同,其 dp 值也是相同的,于是离散化出这些段,只有 log 级别,直接对这些段做就可以了。
T2:
经典的翻棋子游戏,有两个结论:
1.我们可以把⼀个局⾯看成若⼲个独⽴的游戏,每个游戏中只有⼀个棋⼦是⽩⾊的,我们设这类局⾯叫
W
(
x
)
W(x)
W(x) ,其中
x
x
x是⽩⾊的棋⼦。
2.当我们把
x
x
x的颜⾊翻转时,可以视为新加了⼀个
W
(
x
)
W(x)
W(x),因为颜⾊翻转其实是把颜⾊异或上
1
1
1,⽽两个
W
(
x
)
W(x)
W(x)会抵消,符合异或的性质。
于是这样游戏的 SG 值就是每个要翻的白色点 SG 值的 xor 。
其次是要打表找到规律,发现在该题中 SG(W(x))=lowbit(max(i,j)) 。
这种题还是要多尝试打打表。
T3
考虑拓扑序逆序对,其与一个数的位置和本身大小有关,那么在本题中 N 只有 500 的情况下,可以暴力加入状态中,设
d
p
x
,
p
o
s
,
w
dp_{x,pos,w}
dpx,pos,w 表示 x 的子树中,值为 w 的点在第 pos 个位置,dp 的时候暴力枚举转移,通过前缀和以及背包经典优化结论优化就行了。