上来通读一遍题目。T3好像做过吧,好像挺麻烦的,老师可能会换题,那就先放放吧。
听从建议,先看部分分。
T1想了半天,想出了一个貌似正确的做法,写了之后发现过不了样例,输出路径发现做法根本是错的,写了一个暴力扔一边了。
T2从小的部分分开始看,20分的搜,20分是NIM,10分+10分判一下1就好。写完调完发现9点半了,T3没时间了,感觉T2也想不出来了,去码T3.
T3先写了一个保稳的manacher,有30分,之后写后缀数组+记忆化搜索。11点多过了自己出的样例。
估分:30+50+100=180;
得分:20+60+90=170;
不要问我为什么前2题估分不准,我也不知道怎么就看错2个题的数据范围,结果补起来就一样了……
T3保稳的manacher数组开小了,挂了10分。
题解:
T1:倍增floyd??
预处理矩阵的2^1,2^2,...2^m转移(2^m<=n),这个题似乎不满足二分性,但只要加一条i->i d=0的边就好了。
倍增,从大到小用floyd并起来,如果有f[i][i]<0就不加上这一位,同时返回原状态。没有就加上。
同时加的时候需要判断(ans+2^i)是否大于n。
最终答案是ans+1.如果ans+1==n,说明不可能出负环。
T2:阶梯NIM游戏
可以看成一层一层,子节点选了相当于给父节点解锁,相当于子节点拿出来扩大了b[i]倍然后扔给了父亲。由于选的个数任意,所以扩大没有影响。
设\(num[i]=a[i]-\sum_v {a[v]*b[v]}\)
如果b[i]为0,这棵子树不会对上层产生贡献,必须把这棵子树提出来单独处理。
于是d^=num[i] (dep[i]%2==1)
d==0 后手必胜,否则先手必胜。
T3:做过,记忆化搜索和转成欧拉图搞都可过,时间复杂度差不多,都是\(O(\sum_{i=1}^n{L})\)的。不说了。