Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2877520
  • 博文数量: 471
  • 博客积分: 7081
  • 博客等级: 少将
  • 技术积分: 5369
  • 用 户 组: 普通用户
  • 注册时间: 2012-01-04 21:55
文章分类

全部博文(471)

文章存档

2014年(90)

2013年(69)

2012年(312)

分类: C/C++

2012-07-13 11:25:36

Problem:

zoj 1259
火车有n节车厢,顺序编号为1,2,3,...,n,从A驶入,从B驶出,车站里能停放任意多节车厢。一旦进入车站就不再回到A方向的铁轨上,一旦进入B方向铁轨,不再回车站。判断一个指定车厢顺序能否从B方向驶出。



Sample Input

5
1 2 3 4 5

5 4 1 2 3

Sample Output

Yes

入火与出火车,根据出的顺序来比较入的顺序

点击(此处)折叠或打开

  1. #include<stdio.h>
  2. #include <iostream>
  3. #include <stack>

  4. using namespace std;
  5. int isPopSequence(int input[],int target[],int n)
  6. {
  7.     int A=0,B=0;
  8.     stack<int>s;
  9.     int ok=1;
  10.     while(B<n)
  11.     {
  12.         if(input[A]==target[B])
  13.         {
  14.             A++;
  15.             B++;
  16.         }
  17.         //栈不为空,判断栈顶
  18.         else if(!s.empty() && s.top()==target[B])
  19.         {
  20.             s.pop();//已经相当于A++
  21.             B++; //所以B要加1
  22.         }
  23.         else if(A<n)
  24.         {
  25.             s.push(A++);//用input的下一个来比较
  26.         }
  27.         else
  28.         {
  29.             ok=0;
  30.             break;
  31.         }
  32.     }
  33.     return 1;
  34. }


  35. int main()
  36. {
  37.     int a[5]={1,2,3,4,5};
  38.     int b[5]={2,5,4,3,1};
  39.     if(isPopSequence(a,b,5) == 1)
  40.       cout<<"True"<<endl;
  41.     else
  42.       cout<<"False"<<endl;
  43.   
  44.     return 0;
  45. }


hdu 1022 Train problem I(栈~~)

题意:

给定俩个个N长的串,第一个是源,第二个是目标。问能否得到目标序列,能的话再输出序列的进出情况。



阅读(2146) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~