题目链接:http://poj.org/problem?id=1363
题目先开始没有读清楚,结果思路一直是错的,解释下题意,一列顺序为1,2,3。。的列车通过一个中转站后是否能变为给出的序列,其中这个站,类似于那个栈,利用他暂时保留车辆,以调整顺序,比如
3辆车想变为1,3,2,那么2号进站,等三号出来后在从站里出来跟在3后面
天然的栈运用,我们用stack模拟中转站中存的车辆
依次比较出来的序列是否和进站的一样或者于栈顶的一样,否则将这车推入栈,等待后面的判断,最后要是可以的话,栈里的元素应该全部推出!我用i计数进站的车,用k计数出站的出车,模拟这样的中转。
代码如下:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 
 | 
 
 
 #include <iostream>
 #include <cstdio>
 #include <cstring>
 #include <stack>
 using namespace std;
 
 int main()
 {
 int d[1005],n,i;
 stack <int> s;
 while(cin>>n&&n;)
 {
 while(cin>>d[1]&&d;[1])
 {
 for(i=2;i<=n;i++)
 {
 cin>>d[i];
 }
 int i=1,k=1;
 while(i<=n+1&&k;<=n)
 {
 if (d[k]==i)
 {
 i++;k++;
 }
 else if (s.empty()==0&&d;[k]==s.top())
 {
 s.pop();
 k++;
 }
 else
 {
 s.push(i);
 i++;
 }
 }
 if(s.empty())
 cout<<"Yes"<<endl;
 else
 cout<<"No"<<endl;
 while(s.empty()==0)
 s.pop();
 }
 cout<<endl;
 }
 }
 
 
 |