合法出入栈序列类似括号匹配:正数表示料箱入栈,对应负数表示取出,且必须满足后进先出。原序列只被交换了一对相邻记录,因此可以扫描每一对相邻位置,判断它是否是那次错误交换。
先记下每个值出现的下标。对相邻两项 bi,bi+1 分四种情况:
自动化立体库用一个栈暂存料箱。机械臂的操作记录是一个整数序列:若 ai>0,把编号为 ai 的料箱放入栈顶;若 ai<0,需要把编号为 −ai 的料箱从栈顶取出。初始栈空。一段记录合法,当且仅当按顺序执行时每次取出的料箱恰好是当时的栈顶,并且全部操作结束后栈重新为空。原先有一段合法记录,但传输故障把其中某两个相邻位置交换了一次,得到现在的序列 b。请找出一对相邻位置 u,v,交换 bu 与 bv 后序列重新合法。题目保证至少存在一种方案;多解输出任意一种即可。序列中所有非零整数互不相同。
约束:n 为正偶数,2≤n≤100000,1≤∣bi∣≤1048576。
第一行一个正偶数 n,表示序列长度,满足 2≤n≤100000。 第二行 n 个互不相同的非零整数 b1,b2,…,bn,满足 1≤∣bi∣≤1048576。 保证存在一对相邻位置,交换后序列合法。
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.