水题,主要是思路清晰,判断明确。
记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"); } ; }