pku1363 Rails

http://poj.org/problem?id=1363
数据结构 栈
用2个栈模拟,复杂度O(n) (每个元素最多进栈(s2)一次,出栈一次)
s1弹出的元素压入s2,s2再弹出来一定要按照顺序n,n-1,n-2...4,3,2,1
想办法让s2按此顺序弹出,如果不能,则输出"No"
 1 #include <stdio.h>
 2 #include <stack>
 3 
 4 using namespace std;
 5 
 6 stack<int> s1, s2;
 7 
 8 void clear()
 9 {
10     while(!s1.empty())
11     {
12         s1.pop();
13     }
14     while(!s2.empty())
15     {
16         s2.pop();
17     }
18 }
19 
20 int main()
21 {
22     int n, cases, i, a;
23     for(cases=1; scanf("%d", &n), n; cases++)
24     {
25         if(cases-1)
26         {
27             printf("\n");
28         }
29         while(scanf("%d", &a), a)
30         {
31             clear();
32             s1.push(a);
33             for(i=1; i<n; i++)
34             {
35                 scanf("%d", &a);
36                 s1.push(a);
37             }
38             for(i=n; i>=1;)
39             {
40                 if(!s2.empty() && s2.top()==i)
41                 {
42                     s2.pop();
43                     i --;
44                     continue;
45                 }
46                 if(s1.empty())
47                 {
48                     i = -1;
49                     break;
50                 }
51                 else
52                 {
53                     s2.push(s1.top());
54                     s1.pop();
55                 }
56             }
57             printf(i+1? "Yes\n": "No\n");
58         }
59     }
60     return 0;
61 }
原文地址:https://www.cnblogs.com/yuan1991/p/pku1363.html