POJ 1036 Rails 模拟堆栈

时间:2022-01-21 03:13:15

水题,主要是思路清晰,判断明确。

记x为A站最前方的车,y表示下一列要进入B站的车厢,初识时,x=1;y=a1;C=[];

在调度过程中:

if(y==0)那么调度成功,退出模拟过程;否则

if(x==y)就是说接下来进站的正好是要出去的,那就直接让它A—>B 否则

if(C不空 && y=(最后进入C的火车)) 让车从C开出进入B  否则

if(x!=0)那么车 A—>C 否则  无解

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stack>
using namespace std;
;
stack <int> C;
int n,a,b,x,y;
int A[maxn],B[maxn];
int main(){
    while(scanf("%d",&n)&& n){
        memset(B,,sizeof(B));
        memset(A,,sizeof(A));
        ])&&B[]){
            ;i<n;i++)scanf("%d",&B[i]);
            ;i<n;i++)A[i]=i+;
            a=;b=;y=B[b];x=A[a];
            while(!C.empty())C.pop();
            while(true){
                ){//over
                    printf("Yes\n");
                    break;
                }else{
                    if(x==y){//A-->B
                        x=A[++a];
                        y=B[++b];
                    }else{
                        if(!C.empty()&&y==C.top()){//C-->B
                            y=B[++b];
                            C.pop();
                        }else{
                            ){//A-->C
                                C.push(x);
                                x=A[++a];
                            }else{
                                printf("No\n");
                                break;
                            }
                        }
                    }
                }
            }

        }
    printf("\n");
    }
    ;
}