uva514(经典题目)
入门经典上有题解,但是代码本身其实并不能AC,需要修改,黑书上有非常深入的分析,可以参考
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cmath> 5 #include<string> 6 #include<vector> 7 #include<stack> 8 #include<algorithm> 9 #include<map> 10 using namespace std; 11 const int maxn=1000+10; 12 int target[maxn]; 13 int n; 14 int main() 15 { 16 while(cin>>n&&n) 17 { 18 while(cin>>target[1]&&target[1]) 19 { 20 for(int i=2;i<=n;i++) 21 cin>>target[i]; 22 stack <int> s; 23 int A=1,B=1; 24 int ok=1; 25 while(B<=n) 26 { 27 if(A==target[B]) //进站马上出战 28 { 29 A++; B++; 30 } 31 else if(!s.empty()&&s.top()==target[B]) //站前面有车是可以先出战的 32 { 33 s.pop(); 34 B++; 35 } 36 else if(A<=n) s.push(A++); 37 else 38 { 39 ok=0; break; 40 } 41 42 } 43 cout << (ok ? "Yes" : "No" )<<endl; //注意这里必须括号括起来 44 } 45 cout <<endl; 46 } 47 return 0; 48 }
时间: 2024-10-09 06:49:12