【P1098】[NOIP2007 提高组] 字符串的展开

[NOIP2007 提高组] 字符串的展开

题目描述

在初赛普及组的“阅读程序写结果”的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有类似于 d-h 或者 4-8 的字串,我们就把它当作一种简写,输出时,用连续递增的字母或数字串替代其中的减号,即,将上面两个子串分别输出为 defgh45678。在本题中,我们通过增加一些参数的设置,使字符串的展开更为灵活。具体约定如下:

(1) 遇到下面的情况需要做字符串的展开:在输入的字符串中,出现了减号 - ,减号两侧同为小写字母或同为数字,且按照 ASCII 码的顺序,减号右边的字符严格大于左边的字符。

(2) 参数 p 1 p_1 p1:展开方式。 p 1 = 1 p_1=1 p1=1 时,对于字母子串,填充小写字母; p 1 = 2 p_1=2 p1=2 时,对于字母子串,填充大写字母。这两种情况下数字子串的填充方式相同。 p 1 = 3 p_1=3 p1=3 时,不论是字母子串还是数字字串,都用与要填充的字母个数相同的星号 * 来填充。

(3) 参数 p 2 p_2 p2:填充字符的重复个数。 p 2 = k p_2=k p2=k 表示同一个字符要连续填充 k k k 个。例如,当 p 2 = 3 p_2=3 p2=3 时,子串d-h 应扩展为 deeefffgggh。减号两边的字符不变。

(4) 参数 p 3 p_3 p3:是否改为逆序: p 3 = 1 p_3=1 p3=1 表示维持原来顺序, p 3 = 2 p_3=2 p3=2 表示采用逆序输出,注意这时候仍然不包括减号两端的字符。例如当 p 1 = 1 p_1=1 p1=1 p 2 = 2 p_2=2 p2=2 p 3 = 2 p_3=2 p3=2 时,子串 d-h 应扩展为 dggffeeh

(5) 如果减号右边的字符恰好是左边字符的后继,只删除中间的减号,例如:d-e 应输出为 de3-4 应输出为 34。如果减号右边的字符按照 ASCII 码的顺序小于或等于左边字符,输出时,要保留中间的减号,例如:d-d 应输出为 d-d3-1 应输出为 3-1

输入格式

共两行。

1 1 1 行为用空格隔开的 3 3 3 个正整数,依次表示参数 p 1 , p 2 , p 3 p_1,p_2,p_3 p1,p2,p3

2 2 2 行为一行字符串,仅由数字、小写字母和减号 - 组成。行首和行末均无空格。

输出格式

共一行,为展开后的字符串。

样例 #1

样例输入 #1

1 2 1
abcs-w1234-9s-4zz

样例输出 #1

abcsttuuvvw1234556677889s-4zz

样例 #2

样例输入 #2

2 3 2
a-d-d

样例输出 #2

aCCCBBBd-d

提示

40 % 40\% 40% 的数据满足:字符串长度不超过 5 5 5

100 % 100\% 100% 的数据满足: 1 ≤ p 1 ≤ 3 , 1 ≤ p 2 ≤ 8 , 1 ≤ p 3 ≤ 2 1 \le p_1 \le 3,1 \le p_2 \le 8,1 \le p_3 \le 2 1p13,1p28,1p32。字符串长度不超过 100 100 100

NOIP 2007 提高第二题

题解

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;string UnFold(int p1,int p2,int p3,string s)
{while(s.find("-")!=s.npos){int index = s.find("-");if(index == 0){return "-"+UnFold(p1,p2,p3,s.substr(index+1,s.length()));}string ls=s.substr(0,index);string rs=s.substr(index+1,s.length());char start = ls[ls.length()-1];char end = rs[0];if((end<=start)||(isalpha(start)!=isalpha(end))){return ls +'-'+ UnFold(p1,p2,p3,rs);}if(end-start==1){return ls + UnFold(p1,p2,p3,rs);}string unfold;int time = (int)(end)-(int)(start)-1;char fill = start; const char star = '*';//p1=1 小写 p1=2 大写 p1=3 星号if(p1==1&&isalpha(start))fill = tolower(fill);if(p1==2&&isalpha(end))fill = toupper(fill);if(p1==3)fill = star;while(time>0){time--;if(p1<=2)fill++;for(int i=0;i<p2;i++){unfold += fill;}}if(p3==2){reverse(unfold.begin(),unfold.end());}return ls + unfold + UnFold(p1,p2,p3,rs);}return s;
}int main()
{int p1,p2,p3;//p2 = k 表示连续填充k个cin >> p1 >> p2 >> p3;string s;cin >> s;cout << UnFold(p1,p2,p3,s);return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uView对比1.X

uView2.0与uView1.x之间&#xff0c;是有非常大差异的&#xff0c;1.x不能升级到2.x版本。 造成这个问题的根本原因是&#xff0c;2.x是一个重构版本&#xff0c;对1.x进行了整个架构的改造升级&#xff0c;摒弃了1.x中一些不合理的理念和做法&#xff0c;同时引入很多优秀的新…

飞书裁员提供补偿方案或者转岗机会

近期&#xff0c;飞书CEO谢欣发布了一封全员信&#xff0c;宣布公司将进行新一轮的组织调整&#xff0c;其中包括适当精简团队规模。这一决定是为了解决组织自身存在的问题&#xff0c;如团队规模较大但组织不够精干&#xff0c;效率降低&#xff0c;以及力量不够聚焦&#xff…

【OJ】动归练习五之子组串

个人主页 &#xff1a; zxctscl 如有转载请先通知 题目 1. 53. 最大子数组和1.1 分析1.2 代码 2. 918. 环形子数组的最大和2.1 分析2.2 代码 3. 152. 乘积最大子数组3.1 分析3.2 代码 4. 1567. 乘积为正数的最长子数组长度4.1 分析4.2 代码 1. 53. 最大子数组和 1.1 分析 一、…

密码学基础-对称密码/公钥密码/混合密码系统 详解

密码学基础-对称密码/公钥密码 加解密说明1.加密解密必要因素加密安全性说明 什么是对称密码图示说明对称密码详解什么是DES?举例说明 什么是3DES什么是AES? 公钥密码什么是RSA? 对称密钥和公钥密码优缺点对比对称密码对称密码算法总结对称密码存在的问题? 公钥密码公钥密码…

npm ERR! errno CERT_HAS_EXPIRED

1 问题描述 使用npm命令安装相关依赖报错&#xff1a;npm ERR! code CERT_HAS_EXPIRED npm ERR! errno CERT_HAS_EXPIRED npm ERR! request to https://registry.npm.taobao.org/vue%2fcli failed, reason: certificate has expired报错示例图如下所示&#xff1a; 2原因分析…

Spring Boot 整合分布式搜索引擎 Elastic Search 实现 自动补全功能

文章目录 ⛄引言一、分词器⛅拼音分词器⚡自定义分词器 二、自动补全查询三、自动补全⌚业务需求⏰实现酒店搜索自动补全 四、效果图⛵小结 ⛄引言 本文参考黑马 分布式Elastic search Elasticsearch是一款非常强大的开源搜索引擎&#xff0c;具备非常多强大功能&#xff0c;…

03---java面试八股文——spring-----注解-------10题

21、什么是基于注解的容器配置 基于注解的容器配置是指使用注解来代替传统的 XML 配置文件&#xff0c;来配置 Spring 容器和 bean。在基于注解的配置中&#xff0c;开发者可以使用注解来声明 bean、注入依赖关系、管理事务等&#xff0c;而不需要显式地在 XML 配置文件中进行…

谈一谈BEV和Transformer在自动驾驶中的应用

谈一谈BEV和Transformer在自动驾驶中的应用 BEV和Transformer都这么火&#xff0c;这次就聊一聊。 结尾有资料连接 一 BEV有什么用 首先&#xff0c;鸟瞰图并不能带来新的功能&#xff0c;对规控也没有什么额外的好处。 从鸟瞰图这个名词就可以看出来&#xff0c;本来摄像头…

阿里云Salesforce CRM功能差异列表 - Winter‘24

阉割版的阿里云Salesforce由于技术和监管等因素与国际版的Salesforce差距很大&#xff01; 一、Winter‘ 24版差异概况&#xff1a; 1.1. 主要版本&#xff1a; 阿里云上的 Salesforce 提供两个版本&#xff0c;用于生产用途的 CN 版本&#xff08;CN Edition&#xff09;和用…

如何理解SW8110Q搭配UWB使用的功率放大器

SW8110Q是一个搭配DW1000使用的前端模块(FEM)&#xff0c;具有完全集成的功率放大器(PA)和低噪声放大器(LNA)。SW8110Q不需要外部匹配组件&#xff0c;降低了组装复杂性和PCB面积&#xff0c;实现了经济高效的解决方案。 SW8110Q实现了高发射功率、137低收发1381切换4191损耗。…

SqlSugar快速入门

文章目录 配置SqlSugar0、引入SqlSugarCore包1、编写Context类2、配置实体类3、创建Service服务类进行数据库的CRUD4、配置Controller进行路由 配置SqlSugar 0、引入SqlSugarCore包 1、编写Context类 public static SqlSugarClient db new SqlSugarClient(new ConnectionCon…

vitess sysbench性能测试

参考资料&#xff1a; 1、sysbench的使用&#xff1a; https://blog.51cto.com/u_15739244/5781745 1、 安装和部署 1.1 、安装sysbench git clonehttps://github.com/akopytov/sysbench.git cd sysbench git checkout 0.5 yum -y install make automake libtool pkgconf…

Python进行DevOps实践

使用Python进行DevOps实践可以涉及多个方面&#xff0c;从自动化部署、配置管理、监控到日志分析等等。下面是一些具体的方法和实践&#xff0c;展示如何使用Python在DevOps环境中进行工作&#xff1a; 1. 自动化部署 使用Python编写自动化部署脚本&#xff0c;可以极大地提高…

day4 linux上部署第一个nest项目(java转ts全栈/3R教室)

背景&#xff1a;上一篇吧nest-vben-admin项目&#xff0c;再开发环境上跑通了&#xff0c;并且build出来了dist文件&#xff0c;接下来再部署到linux试试吧 dist文件夹是干嘛的&#xff1f; 一个pnpn install 直接生成了两个dist文件夹&#xff0c;前端admin项目一个&#xf…

Jenkins磁盘空间批量清理脚本

一、简介 Jenkins如果没有设置保留构建历史数&#xff0c;磁盘会随着使用次数增加而越来越满&#xff0c;于是需要批量清理一下。 二、清理脚本 找到Script Console 输入脚本&#xff0c;并点击执行&#xff0c;需要注意期望删除的构建历史编号&#xff08;可以查看下面的效果…

14. Springboot集成RabbitMQ

目录 1、前言 2、什么是RabbitMQ 3、安装RabbitMQ 4、Springboot集成RabbitMQ 4.1、添加依赖 4.2、添加配置 4.3、添加controller&#xff0c;作为生产者 4.4、设置生产者消息确认CallBack 4.5、添加Consumer&#xff0c;作为消费者 4.6、启动程序&#xff0c;访问 1…

关键字:this总结

this关键字的使用1. 目前可能出现的问题&#xff1f;及解决方案&#xff1f;我们在声明一个属性对应的setXxx方法时&#xff0c;通过形参给对应的属性赋值。如果形参名和属性名同名了&#xff0c;那么该如何在方法内区分这两个变量呢&#xff1f;解决方案&#xff1a;使用this。…

BaseDao增删改查

一、什么是BaseDao? BaseDao是一种通用的数据访问对象&#xff0c;用于提供对数据库的基本操作&#xff0c;例如插入、更新、删除和查询数据等。它通常封装了对数据库的底层操作&#xff0c;使得其他DAO对象可以继承BaseDao以获得对数据库的访问能力&#xff0c;同时减少了重…

开源推荐榜【VALL-E X 只需3秒语音,快速复刻您喜欢的声音】

软件介绍 Bark是一个声音克隆和文本转语音&#xff08;TTS&#xff09;的开源项目&#xff0c;它结合了多种先进的AI技术和模型&#xff0c;使用户能够通过简单的操作实现真实感强的声音转换和克隆。该项目提供了多种在线体验和Colab笔记本运行的方式&#xff0c;使得用户无需复…

YOLOv9改进策略 :block优化 | 无需TokenMixer也能达成SOTA性能的极简ViT架构 | CVPR2023 RIFormer

&#x1f4a1;&#x1f4a1;&#x1f4a1;本文改进内容&#xff1a; token mixer被验证能够大幅度提升性能&#xff0c;但典型的token mixer为自注意力机制&#xff0c;推理耗时长&#xff0c;计算代价大&#xff0c;而RIFormers是无需TokenMixer也能达成SOTA性能的极简ViT架构…