2821 天使之城

2821 天使之城

 

 时间限制: 1 s
 空间限制: 128000 KB
 题目等级 : 黄金 Gold
 
 
 
题目描述 Description

天使城有一个火车站,每辆火车都从A方向驶入车站,
再从B方向驶出车站。

 

为了调度火车,火车站设有停放轨道,可存放5辆火车。已知从A进入车站顺序为1、2、3……。现在给你一个调度方案,判断是否可行,如果可行,输出出站顺序。
有以下几种调度方法:
A. 将A上的头一辆车驶出B方向
B. 将A上的头一辆车停入暂停轨道
C. 将暂停轨道上最外面的车驶出B方向

输入描述 Input Description

输入第一行一个整数N(n<30)表示调度方案步骤数目。
下一行一个字符串,有N个大写字母,表示调度方法。

输出描述 Output Description

输出若不可行(暂停站满了还停车、暂停站空了还出车),则输出一行“No”。
若可行,输出一行“Yes”,再输出若干行,每行一个整数,表示车出站序列。

样例输入 Sample Input

[样例输入1]
6
ABBCCA
[样例输入2]
5
BACAC

 

样例输出 Sample Output

[样例输出1]
Yes
1
3
2
4
[样例输出2]
No

数据范围及提示 Data Size & Hint

如题

 1 1 #include<iostream>
 2  2 #include<cstdio>
 3  3 using namespace std;
 4  4 int stack[10100],a[1000],top=0;
 5  5 int main()
 6  6 {
 7  7     int i,n,b=1,j=1,k=1; //j是输出数组的参数,k是列车号
 8  8     char s;
 9  9     cin>>n;
10 10     for(i=1;i<=n;++i)
11 11     {
12 12         cin>>s;
13 13         if(s=='A')  //输入A时
14 14         {
15 15             a[j]=k;++j;k++;  //a【】为输出的数组,因为A是火车来了接着就走,k号车接着就走
16 16         }
17 17         if(s=='B')  //输入B时
18 18         {
19 19             stack[++top]=k;++k;  //将K号列车停入暂停轨道,放入栈
20 20         }
21 21         if(s=='C')
22 22         {
23 23             a[j]=stack[top];  //压出栈顶的
24 24             top--;if(top>5||top<0)b=0;  
25 25             ++j;
26 26         }
27 27     }
28 28     if(b)
29 29     {
30 30         cout<<"Yes"<<endl;
31 31         for(int k=1;k<j;++k)
32 32         cout<<a[k]<<endl;
33 33     }
34 34     else cout<<"No";
35 35     return 0;
36 36 }

 

 

posted @ 2017-03-27 20:51  MJT12044  阅读(230)  评论(0编辑  收藏  举报