想T3代码的正确性想的脑阔疼
为什么不给大样例 这就是foi么(怒)
没有大样例我重拳出击 有大样例我唯唯诺诺
感觉题目很怪 T1 看不出来是个什么 T2 想了半天只会50 T3 感觉好像可以三分 然后脑洞大开想了个错误性质怒冲T3
写T2 哈哈 广义sam套树上暴力跳结果把 j j j 打成las了
想了一个误以为是正解的T1正解
骗了50分 它数据还挺严格的
我想的是 所有的都可以被表示成矩形的拼接
然后状压子集枚举 f [ s , w ] f[s,w] f[s,w] 表示把 S S S 内的拼成一个矩形长度为 w w w 最短的宽是多少
正解竟然是神奇暴搜
考虑每个矩形一定贴着某个矩形的右边界 然后从下到上找第一个能放下的位置
考虑建广义sam 把询问串一起放进去 然后查询的时候暴力加树上路径 加完之后 把询问串在sam的dag上走 相当于是对每个点求到根的一条路径的最大值
没有利用10的性质) 应该是要想到可以枚举字串查询的qwq
嘎 最开始想了个三分(我恨 坚持这个想法就骗到100了
然后我莫名其妙的证出来了了一个错误的结论:一条边的两个端点到最远点的最短路一定经过这条边)
然后就抛弃三分写这个了
寄
其实比较好的应该是两个都写一下 对着拍 还是考试习惯不好) 不过三分也是个假做法(有大样例就好了
这里分析一下代码的正确性
我们会发现 代码里没有算第一个点之前的 也没有算最后一个点(因为到这个两个点之后有一侧会没有点) 但为什么这样算出来的答案仍然正确呢
考虑点 x , y x,y x,y 到点 z z z 的距离 a b s ( d 1 − d 2 ) < = d i s ( x , y ) abs(d1-d2)<=dis(x,y) abs(d1−d2)<=dis(x,y)
两侧的位置 1.点都在右边 2.点都在左边
否则可以发现 在这条边上选一点只会让答案变得更大
因此得证 不用考虑最左和最右边的一段