问题描述:某城市有一个火车站。铁轨铺设如图所示。有N节车厢从A方向驶入车站,按进站顺序编号为1~n。你的任务是让他们按照某种特定的顺序进入B方向的铁轨并驶出车站。为了重组车厢,可以借助中转站C,对于每个车,一旦进入c就不能再进入A,一旦c进入B就不能回到c。
测试数据
输入样例:
5
5 4 3 2 1
6
6 5 4 3 2 1
5
5 4 1 2 3
输出样例:
Yes
Yes
No
import java.util.Scanner; import java.util.Stack; /** * 铁轨 * @author NEU-2015 * */ public class Demo { public static void main(String[] args) { Scanner input = new Scanner(System.in); int x; int[] array; Stack<Integer> stack = new Stack<Integer>(); boolean flag; int a; int b; while(input.hasNext()) { flag = true; b = 1; a = 1; x = input.nextInt(); array = new int[x]; for(int i = 0; i < x; i++) { array[i] = input.nextInt(); } //关键部分 while(a <= x) { if(array[a-1] == b) { //1.进队 与 出队 相等 a++; b++; } else if(!stack.empty() && stack.peek() == array[a-1]) { //2.进队 与 出队 不相等 但是 中间栈顶元素 与 出队 元素相等 stack.pop(); a++; } else if(b <= x) { //3.进队 与 出队不相等 栈顶 与 出队 不相等 将进队元素压栈 stack.push(b++); } else { //4.不可能出现输入中 的结果 结束循环 flag = false; break; } } if(!flag) { System.out.println("No"); } else { System.out.println("Yes"); } } } }
时间: 2024-10-25 21:57:48