时间安排
7:30–7:35 读题。
7:35–7:50 T1,写了写第一档,DP传递合法性即可。
7:50–8:15 T1,写n<=2000,可以枚举?的状态DP转移。写完发现求出会有重复。
8:15–8:40 T2,n<=100,可以暴力模拟。复杂度稍微有点高,卡一卡应该能过30左右。
8:40–9:30 T3,k=1的话有有关前缀异或和的性质,只要判一下是否存在对应的前缀,就可以了,但是存在修改不会搞,想到分块重构什么的,但是这样是
n
n
log
n\sqrt n \log
nnlog,光
n
n
n\sqrt n
nn复杂度就已经8e7左右了,复杂度不对,就没去写。对于n<=5000有
n
2
n^2
n2的DP,但是多次询问不好搞。没有opt=1的话也是同样的问题,只会单次
n
2
n^2
n2 的DP,过不了。k<=3对我而言一点用都没有。
9:30–10:10 T2,发现对于n<=5000,可以暴力处理出所有子串出现的位置,然后O(n)求解答案,复杂度除离散化的
n
2
log
n^2\log
n2log外,是均摊
n
2
n^2
n2 的。写完发现内存炸了。容易发现没有必要开
n
2
n^2
n2 个桶,搞一个全局桶,维护
n
2
n^2
n2 个指针就可以了
10:10–10:50 对着T1,T3自闭。
10:50–11:10 T3,发现对于n<=5000,可以维护set,对于每个点实际上是要找之前已合法点的前缀异或和,set维护查找即可。然后只有15分。
11:10–11:30 T3,思考怎么做k=1.
n
n
log
n\sqrt n\log
nnlog的做法复杂度明显不对。考虑什么东西能维护修改,莫名想到在线段树上什么的乱搞,但是没什么用。
11:30–11:50 对着T3自闭/犯瞌睡。