贪心——字典序最小问题

2023-11-11

https://vjudge.net/problem/POJ-3617

题目简单理解就是:

给定长度为N的字符串为S,要构造一个长度为N的字符串T。起初,T 是一个空串,随后反复进行下列任意操作。

①:从S的头部删除一个字符串,加到T的尾部,

②:从S的尾部删除一个字符,加到T的尾部

目标是要构造字典序尽可能小的字符串T。(字典序是指从前到后比较两个字符串大小的方法。首先比较第1个字符,如果不同则第1个字符较小的字符串更小,如果相同则继续比较第2个字符.......如此继续,来比较整个字符串的大小)

限制条件:

1<=N<=2000

字符串S只包含大写英文字母.

输入样例:

6

ACDBCB

输出样例:

ABCBCD

分析:

从字典序的性质来看,不管字符串T的尾部有多大,只要前面够小就可以,所以我们可以采用贪心算法

①:不断去D开头和尾部中较小的一个字符放到T的尾部

②:针对开头和尾部字符相同的情况,我们希望能够尽早使用更小的字符,所以就要比较下一个字符的大小。下一个字符也有可能相同。

因此:

按照字典序比较S和将S反转后的字符串S'

如果S较小,就从S的开头取一个字符,追加到T尾部

如果S'较小,就从S的尾部取出一个字符,追加到T尾部。

如果相同则取哪个都可以。

代码:

#include<iostream>
using namespace std;
#define MAX 2000
char S[MAX+1];
 int main ()
{
    int n;

    cin >> n;
    for (int i = 0; i < n; i++)
        cin >> S[i];
    int a = 0, b = n - 1;
    while (a <= b)
    {
        bool vis = false;
        for (int i = 0; i + a <= b; i++)
        {
            //从字符串的头和尾作比较
            if (S[a + i] < S[b - i])
            {
                vis = true;
                break;
            }
            if (S[a + i] > S[b - i])
            {
                vis = false;
                break;
            }
        }
        if (vis)
            cout << S[a++];
        else
            cout << S[b--];
    }
    cout << endl;
    return 0;
    
}



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

贪心——字典序最小问题 的相关文章

  • 基于ARM的温度采集系统设计

    摘要 本设计是基于嵌入式技术作为主处理器的温度采集系统 利用S3C44B0x ARM微处理器作为主控CPU 辅以单独的数据采集模块采集数据 实现了智能化的温度数据采集 传输 处理与显示等功能 并讨论了如何提高系统的速度 可靠性和可扩展性 并
  • 关于app退出的问题,完美退出方式

    实际开发中会有很多关于app的退出问题 我个人比较常见的有两种 一 双击退出 比如说我们在首页的时候需要一个双击退出的方法 点击第一次手机的返回键时提示 再点一次退出应用 之类的话语 我们可以这样做 对重写onKeyDown方法 当他第一次
  • Zookeeper中Session Timeout的那些事

    前言 RDS系统致力于MySQL数据的高可用 高可靠 高性能以及在线扩展功能 实现这些特性的主要逻辑功能都运行在管理服务器上 一旦管理服务器宕机 数据库的在线扩展功能 备份功能 故障恢复功能等都无从谈起 然而 之前RDS系统管理服务器却是单
  • 服务器读取缓存文件,同一个服务器,chrome可以从缓存读取静态文件,firefox不行...

    服务器是nginx的 配置了下面这段代码 location css js apk root usr local resources expires 12h 用chrome访问可以看到js与css都是 from memory cache 与
  • webpack打包vue反编译_前端性能优化——webpack篇

    相信每个用过webpack的同学都对 打包 和 压缩 这样的事情烂熟于心 这些老生常谈的特性 我更推荐大家去阅读文档 本文将把注意力放在webpack的性能优化上 一 提高构建速度 1 给 loader 减轻负担 用 include 或 e

随机推荐

  • 智能电子界桩自然保护区远程监控解决方案

    一 方案背景 自然保护地是生态建设的核心载体 中华民族的宝贵财富 美丽中国的重要象征 在维护国家生态安全中居于重要地位 经过多年的努力 我国已建立数量众多 类型丰富 功能多样的各级各类自然保护地 在保护生物多样性 保存自然遗产 改善生态环境
  • ajax从服务器读数据,本地网页不刷新

    function ajax url fnSucc fnFild 1 创建对象 var oAjax null if window XMLHttpRequest oAjax new XMLHttpRequest else oAjax new A
  • SQL——DML语句

    DML Data Manipulation Language 一 数据的插入 语法 单行插入 INSERT INTO 表名 字段名1 字段名2 values 值1 值2 多行插入 INSERT INTO 表名 字段名1 字段名2 value
  • 数据库之--count/distinct/group by的用法总结

    一 count distinct group by的用法 1 count 函数是用来统计表中记录的一个函数 返回匹配条件的行数 不去重 2 count 语法 1 count 包括所有列 返回表中的记录数 相当于统计表的行数 在统计结果的时候
  • 已解决cython_bbox安装出现的问题

    为了跑FairMOT代码 配置环境时遇到了该问题 我已经安装了cython 然后下载了压缩包 解压后打开cython bbox 0 1 3文件夹 打开文件setup py 将extra compile args Wno cpp 修改为ext
  • python-sqlalchemy中设置autocommit

    这个只需要在连接数据库的时候加上即可 SQLALCHEMY DATABASE URI mysql pymysql username passwrod ip prot database charset utf8 autocommit true
  • Linux查看日志命令,压缩日志不解压直接查看

    日常工作中经常要在linux服务器上查看日志定位问题 本文简单总结下常用查看日志的命令 监控日志命令 tail f file log tailf file log 上一个命令的快捷键 但是有些系统默认没有 查看日志命令 这个命令其实也可以查
  • 数学建模 优质的信息检索渠道和工具

    文章目录 一 前言 二 主要内容 三 总结 CSDN 叶庭云 https yetingyun blog csdn net 一 前言 优质的信息检索渠道和工具对数学建模比赛获奖有着重要的影响 以下是从理论上分析这一影响的几个主要方面 知识获取
  • vs 2019输出中文乱码解决

    参考 http t csdn cn YDG6B
  • 股市中的内盘、外盘、跌幅、震幅、现手、总手、换手是什么意思?

    外盘即买盘 内盘即卖盘 内盘即卖盘要卖掉 有人买就以这个成交价设为买入价 外盘即买盘要买进 有人卖就以这个成交价设为卖出价 总手就是成交量 1个交易日的买卖总量 即等于外盘 内盘 成交量 总手 量比 在查看分时走势图时候 可根据右键菜单选择
  • hadoop3.0.3搭建与入门(添加删除;调度-节点)

    hadoop版本 apache cloudera CDH版 Hortonworks HDP版 国内对CDH用的多 一般用3 0 单机版 scp hadoop 3 0 3 tar gz jdk 8u181 linux x64 tar gz s
  • 递归算法(二分查找)

    递归也算循环的一种 递归 你打开面前这扇门 看到屋里面还有一扇门 你走过去 发现手中的钥匙还可以打开它 你推开门 发现里面还有一扇门 你继续打开它 若干次之后 你打开面前的门后 发现只有一间屋子 没有门了 然后 你开始原路返回 每走回一间屋
  • RNN循环神经网络的Matlab模拟和训练

    RNN循环神经网络的Matlab模拟和训练 循环神经网络 RNN 是一种适用于序列数据的神经网络 RNN 在处理时间序列数据方面非常适用 如自然语言处理 股票价格预测等 本文将介绍如何使用 Matlab 来进行 RNN 的模拟和训练 在 M
  • 大O表示法及旅行者问题

    算法的运行时间 运行时间增速 不同算法随规模的增大而增大的速度不同 我们需要比较不同算法的运行时间的增速 大O表示法 类比数据结构中的时间复杂度 比较操作数 其体现了算法运行时间的增速 这种表示法体现了算法在最糟情况下的运行时间 这不就是时
  • 全新升级!讯飞星火认知大模型V2.0,你准备好了吗?

    前言 AI大模型正在全球掀起新一轮的技术革命与商业浪潮 从技术突破到应用落地 加速改变着我们的生活与产业 依托通用人工智能领域的持续深耕和系统性创新 科大讯飞于5月6日正式发布星火认知大模型 并于6月9日迅速完成迭代升级 受到用户持续好评
  • 软件测试环境的搭建

    前言 测试环境是QA开展测试工作的前置条件 稳定和可控的测试环境 可以使测试人员在执行测试用例时无需花费额外的时间去维护 有些公司运维或者研发部门会帮忙准备好测试环境 但是QA如果一味依赖其他部门 会局限测试工作的开展 一 什么是测试环境
  • 【PASS】析因设计样本量计算

    b站视频 working
  • 软件设计和硬件开发 部分学习网站

    1 单片机教程网 http www 51hei com 2 博客园 https www cnblogs com 3 各种程序语言基础知识 https www runoob com cprogramming c scope rules htm
  • Linux运维基础--常见命令

    Linux运维基础 常见命令 linux的发行版本介绍 Linux 内核 kernel 版本主要有 4 个系列 分别为 Linux kernel 2 2 Linux kernel 2 4 Linux kernel 2 6 Linux ker
  • 贪心——字典序最小问题

    https vjudge net problem POJ 3617 题目简单理解就是 给定长度为N的字符串为S 要构造一个长度为N的字符串T 起初 T 是一个空串 随后反复进行下列任意操作 从S的头部删除一个字符串 加到T的尾部 从S的尾部