首页 > 代码库 > 天使之城

天使之城

时间限制: 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

代碼實現:

 1 #include<iostream>
 2 #include<cstdio>
 3 using namespace std;
 4 int  stack[5],cx[50],top,n,xc,hc;
 5 char ch;
 6 int main(){
 7     cin>>n;
 8     for(int i=1;i<=n;i++){
 9         cin>>ch;
10         if(ch==A){++hc;cx[xc]=hc;xc++;}
11         if(ch==B){
12             if(top==4){printf("No\n");return 0;}
13             ++hc;stack[top]=hc;top++;
14         }
15         if(ch==C){
16             if(top==0){printf("No\n");return 0;}
17             cx[xc]=stack[top-1];xc++;top--;
18         }
19     }
20     printf("Yes\n");
21     for(int i=0;i<xc;i++) cout<<cx[i]<<endl;
22     return 0;
23 }

曾經讓我一遍過的只有四組數據的題。

天使之城