首页 > 代码库 > HDU Train Problem I 1022 栈模拟

HDU Train Problem I 1022 栈模拟

题目大意:

给你一个n 代表有n列 火车,  第一个给你的一个字符串 代表即将进入到轨道上火车的编号顺序, 第二个字符串代表的是 火车出来之后到顺序,

分析一下就知道这,这个问题就是栈, 先进后出吗, 就是问你这个编号有没有可能出现, 有可能的话输出顺序,没可能直接输出No

题目分析:

我们用栈进行模拟, 先判断是否有这种出栈的可能, 假如有这种可能的话我们在模拟 一遍出栈的顺就行了。

每一次有新元素入栈我们就判断他是否雨 第二个字符串的第一个元素是否相等, 假如一样, 就让次元素出栈。

代码

 1 #include <iostream> 2 #include <queue> 3 #include <cstdio> 4 #include <cstring> 5 #include <cstdlib> 6 #include <stack> 7 using namespace std; 8 #define maxn 15 9 10 11 bool OK(char str1[], char str2[],int n)//判断是否存在这种出栈的可能12 {13     stack<char> P;14     P.push(#);//因为有元素要删除赋值, 不能为空, 我们让第一个元素为‘#’15     char ans;16     int i, j;17     for(i=0, j=0; i<n; i++)18     {19         P.push(str1[i]);20         ans = P.top();21         while(ans == str2[j] )22         {23             P.pop();24             j ++;25             ans = P.top();//此处是要赋值判断的, 假如为空的话就无法赋值, 因此我们让第一个元素为‘#’26         }27     }28     if(j == n)29         return true;30     return false;31 }32 33 void Putt(char str1[], char str2[],int n)34 {35     stack<char> P;36     P.push(#);37     for(int i=0, j=0; i<n; i++)38     {39         P.push(str1[i]);40         printf("in\n");41         char ans = P.top();42         while(ans == str2[j])43         {44             P.pop();45             printf("out\n");46             j ++;47             ans = P.top();48         }49     }50 }51 int main()52 {53     int n;54     char str1[maxn], str2[maxn];55     while(cin >> n >> str1 >> str2)56     {57         if(OK(str1, str2, n) )58         {59             printf("Yes.\n");60             Putt(str1,str2,n);61         }62         else63             printf("No.\n");64 65         printf("FINISH\n");66     }67     return 0;68 }

 

HDU Train Problem I 1022 栈模拟