栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

哈尔滨理工大学21级新生程序设计竞赛(同步赛)(重现赛)@aquamoon

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

哈尔滨理工大学21级新生程序设计竞赛(同步赛)(重现赛)@aquamoon

给定长度为N的字符串S,要构造一个长度为N的字符串T。T初始是空字符串。S由大写字母构成。
构造过程通过反复进行以下任意操作:
从S的头部删除一个字符,添加到T的尾部
从S的尾部删除一个字符,添加到T的尾部
请你构造出字典序尽可能小的字符串T(字典序是指首先比较第一个字符,如果不同则第一个字符
较小的字符串更小,如果相同则比较第二个字符,以此类推)
 

输入描述:
第一行一个整数N,表示字符串的长度(1<=n<=2000)
第二行输入一个长度为N的字符串S

输出描述:
输出构造出的尽可能小的字符串T

示例1

输入
6
ACDBCB
输出
ABCBCD

题目解析:

题解:
先比较左右两端两个字符的字典序谁更小,更小的先放;如果相等,两指针都移动一位,继续比较,直到找到有大小关系的或找到尽头,最后把符合条件的放进去;其中a,b这两个变量在里面充当的角色是非常重要的,下面是我的代码。

#include
using namespace std;
int N;
char a[2010];
int main() 
{
    int i,l,e;
    bool flag;
    cin>>N;
    for(i=0; i         cin>>a[i];
    l=0,e=N-1;
    while(l<=e)
    {
        flag=false;
        for(i=0; l+i<=e; i++) 
        {
            if(a[l+i]             {
                flag=true;
                break;
             } 
            else if(a[l+i]>a[e-i])
            {
                flag=false;
                break;
             }
        }
        if(flag)
            cout<         else
            cout<      }
     cout<      return 0;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/665983.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号