• 问题 I: 约会序列(两边枚举)


    问题 I: 约会序列

    时间限制: 1 Sec  内存限制: 128 MB
    提交 状态

    题目描述

    众所周知,HYF有很多小姊妹。
    HYF的小姊妹军团共有N个人,他每天选择一个不同的MM约会。现在HYF想把未来的N天里要约会的MM做一个计划……
    首先,他按照自己的标准把N个MM分成A等~Z等,当然A等是质量最好的,Z等是质量最差的(可怜的Z等MM……),然后把她们随机地排成一个队列,比如ACDBCB。HYF决定每次选择队列最前或最后的MM约会,约过的MM就从队列中删去,这样就得到一个长度为N的约会序列。不同的选择方式会得到不同的约会序列,贪心的HYF当然希望先约质量高的MM啦!所以他希望得到所有约会序列中字典序最小的那个。
    请你写一个程序帮他确定这样的约会序列。

    输入

    第一行一个正整数N,表示一共N个MM
    接下来N行,每行一个大写字母,表示队列中第i个MM的级别

    输出

    一行一个长度为N的字符串,表示约会序列中字典序最小的那个。

    样例输入 Copy

    6
    A
    C
    D
    B
    C
    B
    

    样例输出 Copy

    ABCBCD
    

    提示

    30%的数据,N<=20
    60%的数据,N<=100
    100%的数据,N<=2000
    这个题就是两边枚举,如果两边值一样大的时候(a[l]==a[r]),就在再判断(a[l+1]和a[r-1])
    #include<iostream>
    #include<algorithm>
    using namespace std;
    const int maxn=1e6+100;
    char a[maxn];
    int n;
    char b[maxn];
    int main(){
        cin>>n;
        for(int i=1;i<=n;i++){
            cin>>a[i];
        }
        int l=1,r=n;
        int cnt=0;
        while(r>=l){
            if(a[l]<a[r]){
                b[++cnt]=a[l];
                l++;
            } 
            else if(a[l]>a[r]){
                b[++cnt]=a[r];
                r--; 
            }
            else{
                int flag=0;
                int ll=l+1,rr=r-1;
                while(rr>=ll){
                    if(a[ll]<a[rr]){
                        flag=1;
                        break;
                    }    
                    if(a[ll]>a[rr]){
                        flag=0;
                        break;
                    }
                    ll++;
                    rr--; 
                }
                if(flag==0){
                    b[++cnt]=a[r];
                    r--;
                }
                else{
                    b[++cnt]=a[l];
                    l++;
                }
            } 
        }
        for(int i=1;i<=n;i++){
            cout<<b[i];
        }
    }
     
  • 相关阅读:
    css 和 svg 实现蚂蚁行军效果
    ASP.NET Core使用Swagger实现接口文档并分组
    Centos7+DockerCompose部署ASP.NET Core3.1应用
    Centos7+Docker部署ASP.NET Core3.1应用
    ASP.NET Core下的Cache
    在asp.net web form项目中添加webapi接口
    windows服务中对外提供API接口
    ASP.NET Core使用log4net记录日志
    SSL踩坑ERR_SSL_VERSION_OR_CIPHER_MISMATCH
    C# 调用微信接口上传素材和发送图文消息
  • 原文地址:https://www.cnblogs.com/lipu123/p/14017741.html
Copyright © 2020-2023  润新知