BZOJ 3799 字符串重组 贪心模拟乱搞

2024-03-30 16:58

本文主要是介绍BZOJ 3799 字符串重组 贪心模拟乱搞,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Description

给出一个字符串S,现希望对它进行重新组合得到
一个字符串,其比T大且是字典序最小的。

Input

输入第一行为S,第二行为T

Output

输出重组后的结果,如果不存在输出-1

Sample Input

abad
bob

Sample Output

daab

HINT

字符串长度<=5000




传送门

首先肯定是有贪心的想法的,

我们要求比T串大且最小,那么有以下一些简单的思想:

1.和T串的最长公共前缀尽量长。

2.比T串某一位大的那个字符尽量小。

3.比T串某一位大的那个字符之后,后面的排列从小到大。

记录一下对于T的每一位是否在S里面存在Equal和Bigger即可。

然后特殊情况(其实样例就是),既没有Equal也没有Bigger,

这种情况再找一个合法的即可。


主要考验模拟的细节吧……



#include<bits/stdc++.h>
using namespace std;
const int N=5005;
char S[N],T[N];
int LS,LT;
bool p[N];
int Equal[N],Bigger[N];
int main(){scanf("%s",S+1);scanf("%s",T+1);LS=strlen(S+1),LT=strlen(T+1);sort(S+1,S+1+LS);string ans=""; bool flag=0;for (int i=1;i<=LT;i++){int tmp=0;for (int j=1;j<=LS;j++)if (!p[j] && S[j]==T[i]){tmp=j;break;}if (tmp) Equal[i]=tmp,p[tmp]=1,ans+=S[tmp];tmp=0;for (int j=1;j<=LS;j++)if (!p[j] && S[j]>T[i]){tmp=j;break;}if (tmp){Bigger[i]=tmp;if (!Equal[i]) p[tmp]=1,ans+=S[tmp];}if (!Equal[i] && Bigger[i]) break;if (!Equal[i] && !Bigger[i]){flag=1;break;}}if (flag){int tt=ans.size(),tmp=0;for (int i=LT;i;i--)if (Bigger[i]){tmp=i;break;}if (!tmp){puts("-1");return 0;}for (int i=0;i<tmp-1;i++) printf("%c",ans[i]);printf("%c",S[Bigger[tmp]]);for (int i=1;i<=LS;i++)if (!p[i]) printf("%c",S[i]);puts("");return 0; }cout<<ans;for (int i=1;i<=LS;i++)if (!p[i]) printf("%c",S[i]);puts("");return 0;
}



这篇关于BZOJ 3799 字符串重组 贪心模拟乱搞的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/862048

相关文章

Python中反转字符串的常见方法小结

《Python中反转字符串的常见方法小结》在Python中,字符串对象没有内置的反转方法,然而,在实际开发中,我们经常会遇到需要反转字符串的场景,比如处理回文字符串、文本加密等,因此,掌握如何在Pyt... 目录python中反转字符串的方法技术背景实现步骤1. 使用切片2. 使用 reversed() 函

Mysql实现范围分区表(新增、删除、重组、查看)

《Mysql实现范围分区表(新增、删除、重组、查看)》MySQL分区表的四种类型(范围、哈希、列表、键值),主要介绍了范围分区的创建、查询、添加、删除及重组织操作,具有一定的参考价值,感兴趣的可以了解... 目录一、mysql分区表分类二、范围分区(Range Partitioning1、新建分区表:2、分

MySQL查询JSON数组字段包含特定字符串的方法

《MySQL查询JSON数组字段包含特定字符串的方法》在MySQL数据库中,当某个字段存储的是JSON数组,需要查询数组中包含特定字符串的记录时传统的LIKE语句无法直接使用,下面小编就为大家介绍两种... 目录问题背景解决方案对比1. 精确匹配方案(推荐)2. 模糊匹配方案参数化查询示例使用场景建议性能优

MySQL 获取字符串长度及注意事项

《MySQL获取字符串长度及注意事项》本文通过实例代码给大家介绍MySQL获取字符串长度及注意事项,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录mysql 获取字符串长度详解 核心长度函数对比⚠️ 六大关键注意事项1. 字符编码决定字节长度2

Springboot3+将ID转为JSON字符串的详细配置方案

《Springboot3+将ID转为JSON字符串的详细配置方案》:本文主要介绍纯后端实现Long/BigIntegerID转为JSON字符串的详细配置方案,s基于SpringBoot3+和Spr... 目录1. 添加依赖2. 全局 Jackson 配置3. 精准控制(可选)4. OpenAPI (Spri

使用Python实现base64字符串与图片互转的详细步骤

《使用Python实现base64字符串与图片互转的详细步骤》要将一个Base64编码的字符串转换为图片文件并保存下来,可以使用Python的base64模块来实现,这一过程包括解码Base64字符串... 目录1. 图片编码为 Base64 字符串2. Base64 字符串解码为图片文件3. 示例使用注意

Python使用pynput模拟实现键盘自动输入工具

《Python使用pynput模拟实现键盘自动输入工具》在日常办公和软件开发中,我们经常需要处理大量重复的文本输入工作,所以本文就来和大家介绍一款使用Python的PyQt5库结合pynput键盘控制... 目录概述:当自动化遇上可视化功能全景图核心功能矩阵技术栈深度效果展示使用教程四步操作指南核心代码解析

golang float和科学计数法转字符串的实现方式

《golangfloat和科学计数法转字符串的实现方式》:本文主要介绍golangfloat和科学计数法转字符串的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望... 目录golang float和科学计数法转字符串需要对float转字符串做处理总结golang float

Python如何判断字符串中是否包含特殊字符并替换

《Python如何判断字符串中是否包含特殊字符并替换》这篇文章主要为大家详细介绍了如何使用Python实现判断字符串中是否包含特殊字符并使用空字符串替换掉,文中的示例代码讲解详细,感兴趣的小伙伴可以了... 目录python判断字符串中是否包含特殊字符方法一:使用正则表达式方法二:手动检查特定字符Pytho

Python模拟串口通信的示例详解

《Python模拟串口通信的示例详解》pySerial是Python中用于操作串口的第三方模块,它支持Windows、Linux、OSX、BSD等多个平台,下面我们就来看看Python如何使用pySe... 目录1.win 下载虚www.chinasem.cn拟串口2、确定串口号3、配置串口4、串口通信示例5