题目链接: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