1357:车厢调度(train)
将入口A和车站C分别视为一个栈,其中A栈可以弹出到B或C,C只能弹出到B。
1 #include<iostream> 2 #include<cstdio> 3 #include<stack> 4 using namespace std; 5 6 const int N=1005; 7 stack<int> sa,sc; 8 int b[N]; 9 10 int main(){ 11 int n; 12 cin>>n; 13 for(int i=1;i<=n;i++) 14 scanf("%d",b+i); 15 for(int i=n;i>0;i--)sa.push(i); 16 int p=1; 17 while(p<=n){ 18 if(!sa.empty()&&sa.top()==b[p]){ 19 sa.pop(); 20 p++; 21 }else if(!sc.empty()&&sc.top()==b[p]){ 22 sc.pop(); 23 p++; 24 }else{ 25 if(sa.empty())break; 26 sc.push(sa.top()); 27 sa.pop(); 28 } 29 } 30 if(p>n)cout<<"YES"; 31 else cout<<"NO"; 32 return 0; 33 }