poj 1363 Rails 解题报告

题目链接:http://poj.org/problem?id=1363

题意:有一列火车,车厢编号为1~n,从A方向进站,向B方向出站。现在进站顺序确定,给出一个出站的顺序,判断出站顺序是否合理。

实际上是模拟栈的过程,而栈的特点是先进后出。另外一个麻烦的地方就是输入输出格式问题。

本题实现提供两种方法:没有用到STL栈和有用到STL栈

 1 #include <iostream>      // 法二:头文件多包含一个 #include <stack>
 2 using namespace std;
 3 
 4 const int maxn = 1000 + 5;
 5 
 6 int main()
 7 {
 8     int A, B, i, n, top, target[maxn], stack[maxn];  // 法二:数组stack去掉, 变成 stack<int> s
 9     while (scanf("%d", &n) && n)
10     {
11         while (1)
12         {
13             int flag = 1;
14             for (i = 1; i <= n; i++)
15             {
16                 scanf("%d", &target[i]);
17                 if (target[1] == 0)
18                 {
19                     flag = 0;
20                     break;
21                 }
22             }
23             if (!flag)
24             {
25                 printf("\n");
26                 break;
27             }
28             int ok = 1;
29             A = B = 1;
30             top = 0;
31             while (B <= n)
32             {
33                 if (A == target[B])    // 处理1~n的特殊情况
34 { 35 A++, B++; 36 } 37 else if (top && stack[top] == target[B]) // top && !s.empty() && s.top() == target[B] 出栈
38 { 39 top--; // s.pop(); 40 B++; 41 } 42 else if (A <= n) 43 { 44 stack[++top] = A; // s.push(A); 进栈 45 A++; 46 } 47 else 48 { 49 ok = 0; 50 break; 51 } 52 } 53 if (ok) 54 printf("Yes\n"); 55 else 56 printf("No\n"); 57 } 58 } 59 return 0; 60 }

 

posted @ 2013-07-28 23:54  windysai  阅读(655)  评论(0编辑  收藏  举报