• codevs2821 天使之城


    传送门

    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

    如题

    【思路】

    模拟栈

    【code】

    #include<iostream>
    #include<cstdio>
    using namespace std;
    int cnt,wait[50],station[50],ans[50],tot,num,n;
    char od[50];
    int main()
    {
        scanf("%d",&n);
        scanf("%s",od);
        for(int i=0;i<n;i++)
        {
            if(od[i]=='A')
            {
                ans[++tot]=++cnt;        
            }
            if(od[i]=='B')
            {
                if(num==5){
                    printf("No
    ");
                    return 0;
                }
                wait[++num]=++cnt;
            }
            if(od[i]=='C')
            {
                if(num==0){
                    printf("No
    ");
                    return 0;
                }
                ans[++tot]=wait[num];
                num--;
            }
        }
        printf("Yes
    ");
        for(int i=1;i<=tot;i++)
        printf("%d
    ",ans[i]);
        return 0;
    }

    一年后写的另一份代码20180717

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    
    int n,t1,t2,now,sta[11],ans[11];
    string s;
    
    
    int main(){
        scanf("%d",&n);cin>>s;now=1;
        for(int i=0;i<n;i++){
            if(s[i]=='A')ans[++t1]=now++;
            if(s[i]=='B')if(t2==5){
                printf("No
    ");return 0;
            }else sta[++t2]=now++;
            if(s[i]=='C')if(t2==0){
                printf("No
    ");return 0;
            }else ans[++t1]=sta[t2--];
        }
        printf("Yes
    ");
        for(int i=1;i<=t1;i++)printf("%d
    ",ans[i]);
        return 0;
    }
  • 相关阅读:
    chrome浏览器实现上传下载功能
    Python安装第三方库时报错的解决办法
    python文本编辑器Visual Studio Code
    python下载安装
    selenium环境配置
    linux_安装浏览器
    在linux中安装selenium+chrome
    armbian_配置selenium
    armbian_运行puppeteer
    java环境配置
  • 原文地址:https://www.cnblogs.com/zzyh/p/6962872.html
Copyright © 2020-2023  润新知