Train Problem——判断输出序列是否是输入序列的出栈顺序
2011-01-08 12:11
316 查看
http://acm.hdu.edu.cn/showproblem.php?pid=1022
#include <iostream> #include <stack> using namespace std; void TestIsStackSequence(char *in, char *out); int main() { int n; char in[10]; char out[10]; while (scanf("%d %s %s", &n, in, out) != EOF) { TestIsStackSequence(in, out); } return 0; } /************************************************************************/ /* 思路:遍历输入序列in的每一个元素,并将其插入到栈s中,并且比较栈顶元素与输出序列第j位置的元素, 若相等栈顶元素出栈,j++, 若栈为空,跳出循环,进行下次遍历。 /************************************************************************/ //参数in为输出的序列,out为输出的序列 void TestIsStackSequence(char *in, char *out) { int len_in = strlen(in); int len_out = strlen(out); int *inOrder = new int[len_in]; int *outOrder = new int[len_out]; int *arr = new int[len_in * 2]; //存放是入栈还是出栈的标识(1:表示入栈,0:表示出栈) int i, j, k; for (i=0; i<len_in; i++) //将字符串转换成int数字,其实没必要的 { inOrder[i] = in[i] - '0'; outOrder[i] = out[i] - '0'; } stack<int> s; i = j = k = 0; while(i < len_in) //遍历输入序列 { s.push(inOrder[i++]); arr[k++] = 1;//表示入栈 while (s.top() == outOrder[j]) //入栈顶元素与输出序列第j位置的元素相同,进行弹出操作 { s.pop(); arr[k++] = 0; //表示出栈 j++; if (s.empty()) //如栈为空,跳出当前循环进行下次 { break; } } } if (!s.empty()) //若非空,失败 { cout<<"No./nFINISH"<<endl; } else //成功 { cout<<"Yes."<<endl; for (i=0; i<len_in * 2; ++i) { if (arr[i] == 1) { cout<<"in"<<endl; } else { cout<<"out"<<endl; } } cout<<"FINISH"<<endl; } }
相关文章推荐
- 给定入栈顺序,输出所有可能的出栈情况,并判断给定的序列是否为正确的输出序列
- HDU 1022 Train Problem I(判断出栈序列是否可行)
- 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一
- 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。
- 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一
- 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一
- 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一
- (hdu step 8.1.2)Train Problem I(站的基本应用——判断一个序列经过栈后是否能够得到第二个序列)
- 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一
- 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。
- 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序
- 剑指offer题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。
- 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一
- 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列12345是某栈的压入顺序,序列45321为该压栈序列对应弹出顺序。
- 已知入栈顺序,判断某一序列是否为其合法出栈序列!
- 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)
- 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。
- Problem Description 有一个长度为n(n<=100)的数列,该数列定义为从2开始的递增有序偶数,现在要求你按照顺序每m个数求出一个平均值,如果最后不足m个,则以实际数量求平均值。编程输出该平均值序列。 Input 输入数据有多组,每组占一行,包含两个正整数n和m,n和m的含义
- 判断给定序列是否为某BST后序输出
- 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。