紫书 例6-2 铁轨(Rails,ACMICPC CERC 1997,UVa 514)

    技术2025-05-03  27

    大家好,我是小黄呀。

    VJ题目传送门

    题目大意

    有n节车厢从A方向驶入车站,按照1~n的顺序编号,判断能否按照特定的顺序从B方向驶出。 即从A方向按序入栈,从B出栈,运用逆向思维判断是否符合栈的后进先出原则。

    具体代码

    #include<cstdio> #include<stack> using namespace std; const int MAXN = 1000 + 10; int n,target[MAXN]; int main() { while(scanf("%d",&n)==1) { stack<int> s;//中间栈 int A=1,B=1;//A方向,B方向 for(int i=1;i<n;i++)//输入B方向目标顺序 scanf("%d",&target[i]); int ok=1;//判断是否可行 while(B<=n)//在范围之内 { if(A==target[B])//单个元素从A入栈立马出栈 { A++; B++; } else if(!s.empty()&&s.top()==target[B])//多个元素从A入栈,按照后进先出的原则依次出栈 { s.pop(); B++; } else if(A<=n)//A入栈 s.push(A++); else//不符合A到B的顺序,即后进先出原则 { ok=0; break; } } printf("%s\n",ok?"Yes": "No"); } return 0; }
    Processed: 0.017, SQL: 9