从左向右找到第一个 pi=qi 的位置 l,从右向左找到最后一个不相等的位置 r。若整段都相等,则 l=r=0,对应把长度为 1 的区间翻转(序列不变),答案为 1。
否则,检查把 p[l..r] 翻转后是否恰好等于 q[l..r]:用两个指针同时从两端向中间走,判断 p[left] 是否等于 q[right]。只要有一处对不上,说明这一段不是另一段的逆序,答案为 0。
若这一段翻转后已经对齐,则这一组 [l,r] 是一种合法选择。还可以尝试把区间同时向两边扩张:当 l−1≥0、r+1<n 且 pl−1=pr+1 时,扩张后翻转仍然合法(外侧本来就已经与 q 相等)。每成功扩张一次,答案加 1。
给定两个长度为 n 的整数序列 p 和 q。允许且必须对 p 执行恰好一次区间翻转:选定闭区间 [L,R](下标从 1 开始),将 pL,pL+1,…,pR 前后倒置。例如序列 2,3,4,1,5,6 翻转区间 [3,6] 后变为 2,3,6,5,1,4。
请计算有多少种不同的区间选择,能在这次翻转后使 p 与 q 完全相同。
约束:序列长度不超过 10^4,序列中每个元素均为不超过 10^4 的正整数。
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.