天使城有一个火车站,每辆火车都从A方向驶入车站,
再从B方向驶出车站。
为了调度火车,火车站设有停放轨道,可存放5辆火车。已知从A进入车站顺序为1、2、3……。现在给你一个调度方案,判断是否可行,如果可行,输出出站顺序。
有以下几种调度方法:
A. 将A上的头一辆车驶出B方向
B. 将A上的头一辆车停入暂停轨道
C. 将暂停轨道上最外面的车驶出B方向
输入描述
输入第一行一个整数N(n<30)表示调度方案步骤数目。
下一行一个字符串,有N个大写字母,表示调度方法。
输出描述
输出若不可行(暂停站满了还停车、暂停站空了还出车),则输出一行“No”。
若可行,输出一行“Yes”,再输出若干行,每行一个整数,表示车出站序列
#include<iostream>
using namespace std;
int top=-1;
int st[100]={0};
void clear(){
top =-1;
}
int size(){
return top+1;
}
bool empty(){
if(top=-1){
return true;
}
else{
return false;
}
}
void push(int x){
st[++top]=x;
}
void pop(){
top--;
}
int topp(){
return st[top];
}
int main(){
int n;
cin>>n;
int u=1;
int o=0;
int a[100]={0};
for(int i=0;i<n;i++){
char m;
cin>>m;
if(m=='A'){
a[o++]=u;
u++;
}
else if(m=='B'){
if(size()==5){
cout<<"No";
return 0;
}
else{
push(u);
u++;
}
}
else{
if(empty()){
cout<<"No";
return 0;
}
else{
pop();
a[o++]=u;
u++;
}
}
}
cout<<"Yes"<<endl;
for(int i=0;i<u-1;i++){
cout<<a[i]<<endl;
}
}