问题见求助玄学性质 (第一次写,表述不清请见谅)
0基本的发现
首先
我没写return 0;(真的)
当a队列里只剩最后一个数字 k 时,因为答案要求按字典顺序最优,应从左边出队。
即最后一位一定为L。
其次
记 a 队列中的第一个数字 (左起) 为 k,第二个为 x,最后一个为 y。
则 a 队列可记为
b 队列为
a 队列中,k 被出队。
下一个被出队的只能是 x 或 y
也。
也就是说b 队列为
则倒数第二个被出队的是 x 或 y
也就是说,还剩两个数字时,a 队列为
x,k 或 k,x 或 y,k 或 k,y
即假使有解,则a 队列为
或
或
或
那么,我们只需判断,第二个k的左和右端是否有x或y。
如果左边有 x,则正着多一个 L,反着多一个 L。
如果右边有 x,则正着多一个 L,反着多一个 R。
如果左边有 y,则正着多一个 R,反着多一个 L。
如果右边有 x,则正着多一个 L,反着多一个 R。
然后就会出现新的x,新的y。
重复此操作,从两边和中间同时推进,就是n-1次。
T组数据,左右各n次,算法O(T·n)
代码明天去学校再发 (考试没加return 0 啊啊啊)
(第一次写,表述不清请见谅)