hdu 1022 Train Problem I 解题报告

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1022

     又是一道栈的练习,这次也是没有用到STL中的栈来实现。用来保存操作过程的数组(process[])一定要开得足够大(一开始开小了导致wa)

 1 #include <iostream>
 2 #include <string.h>
 3 #include <stdio.h>
 4 using namespace std;
 5 
 6 const int maxn = 10;
 7 int main()
 8 {
 9     char o1[maxn], o2[maxn], stack[maxn]; 
10     int i, j, n, a, b, k, process[30];
11     while (scanf("%d", &n) != EOF)
12     {
13         scanf("%d%d", &a, &b);
14         sprintf(o1, "%d", a);   // 把整型的a、b转化成字符串,当然这里可以直接在第11行中写成while(scanf("%d%s%s", &n, o1, o2) != EOF) 
15         sprintf(o2, "%d", b);
16     //    cout << "o1 = " << o1 << endl;
17     //    cout << "o2 = " << o2 << endl;
18         int top = 0;
19         int ok = 1;
20         k = i = j = 0;
21         memset(process, 0, sizeof(process));
22         while (j < n)
23         {
24     /*        if (o1[i] == o2[j])
25             {
26                 i++;
27                 j++;
28             } */    // 如果进栈和出栈的顺序刚好相同,则省去不必要的进栈和出栈操作,不过这里为了缩短代码所以干脆注释掉
29             if (top && stack[top] == o2[j])
30             {
31                 top--;
32                 j++;
33                 process[k] = 0;    // 保存出栈操作out
34             }
35             else if (i < n)
36             {
37                 stack[++top] = o1[i++];    
38                 process[k] = 1;  // 保存进栈操作in
39             }
40             else
41             {
42                 ok = 0;    
43                 break;
44             }
45             k++;
46         }
47         if (ok)
48         {
49             printf("Yes.\n");
50             for (i = 0; i < k; i++)
51             {
52                 printf("%s\n", (process[i] ? "in" : "out"));
53             }
54         }
55         else
56             printf("No.\n");
57         printf("FINISH\n");
58     }
59     return 0;
60 }
61 
62  
原文地址:https://www.cnblogs.com/windysai/p/3224082.html