当前位置: 首页 > news >正文

牛客:字符串展开

对于给定由减号
"-"
"-" 、小写字母和数字组成的字符串
s
s ,我们认为减号是一种简写,在完整的输出时,需要用连续递增的字母或数字串替代其中的减号。例如,将
"d-h"
"d-h" 和
"4-8"
"4-8" 分别输出为
"d
efg
h"
"defgh" 和
"4
567
8"
"45678"。
具体地,我们这样定义展开规则:当出现一个减号时,若它不位于字符串的开头或结尾、且其两侧为同类型的字符(都是小写字母或都是数字)、且右侧字符的 ASCII 码大于左侧字符时,则需要展开该片段。

特别的,在本题中,展开规则还由一个三元组
(
p
1
,
p
2
,
p
3
)
(p
1

,p
2

,p
3

) 额外控制:
p
1
p
1

控制展开方式:


∙当
p
1

1
p
1

=1 时:若减号两侧为字母,则用小写字母填充;若为数字,则用数字填充。


∙当
p
1

2
p
1

=2 时:若减号两侧为字母,则用大写字母填充;若为数字,则用数字填充。


∙当
p
1

3
p
1

=3 时,无论减号两侧为何种字符,都用星号
""
"
" 填充;
p
2
p
2

控制每个填充字符重复的次数:即无论字符类型如何,每个待填充字符都要连续输出
p
2
p
2

次。例如,当
p
2

3
p
2

=3 时,子串
"d-h"
"d-h" 应扩展为
"d
eeefffggg
h"
"deeefffgggh"。
p
3
p
3

控制是否逆序输出填充部分:


∙当
p
3

1
p
3

=1 时,表示维持原有顺序;


∙当
p
3

2
p
3

=2 时,表示采用逆序输出。例如当
p
1

1
;

p
2

2
;

p
3

2
p
1

=1; p
2

=2; p
3

=2 时,子串
"d-h"
"d-h" 应扩展为
"d
ggffee
h"
"dggffeeh"。

还需要注意以下特殊情况:


∙如果右侧字符是左侧字符的直接后继(如
"d-e"
"d-e" 或
"3-4"
"3-4" ),则只需删除减号;


∙如果右侧字符的 ASCII 码小于等于左侧字符,则保持原样输出(包含减号)。
输入描述:
第一行输入三个整数
p
1
,
p
2
,
p
3
(
1

p
1

3
;

1

p
2

8
;

1

p
3

2
)
p
1

,p
2

,p
3

(1≤p
1

≤3; 1≤p
2

≤8; 1≤p
3

≤2) 代表展开规则中的
p
1
,
p
2
,
p
3
p
1

,p
2

,p
3


第二行输入一个长度不超过
100
100 ,由减号
"-"
"-" 、小写字母和数字组成的字符串
s
s ,代表需要展开的字符串。
输出描述:
在一行上输出一个字符串,代表展开后的答案。

include

include

include

using namespace std;
using ll=long long;
bool is_digit(char c)
{
return c>='0'&&c<='9';
}
bool is_upper(char c)
{
return c>='A'&&c<='Z';
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr),cout.tie(nullptr);
ll p1,p2,p3;
cin>>p1>>p2>>p3;
string s;
cin.ignore();
getline(cin,s);
ll l=s.length();
vectorpos;
for(ll i=0;i<l;i++)
{
if(s[i]'-')
{
if(i
0||il-1)
{
cout<<s[i];
continue;
}
else if(s[i-1]>=s[i+1]||(is_digit(s[i-1])&&!is_digit(s[i+1]))||(!is_digit(s[i-1])&&is_digit(s[i+1]))||(is_upper(s[i-1])&&!is_upper(s[i+1]))||(!is_upper(s[i-1])&&is_upper(s[i+1]))||s[i-1]
'-')
{
cout<<s[i];
}
else if(static_cast(s[i+1])-static_cast(s[i-1])1)
{
continue;
}
else
{
if(p1
1)
{
if(p31)
{
if(!is_digit(s[i+1])&&!is_digit(s[i-1]))
{
char c1=s[i-1];
char c2=s[i+1];
if(is_upper(s[i-1]))c1=(char)(s[i-1]+32);
if(is_upper(s[i+1]))c2=(char)(s[i+1]+32);
ll a1=(int)c1;
ll a2=(int)c2;
for(ll i=a1+1;i<=a2-1;i++)
{
for(ll j=0;j<p2;j++)
{
cout<<(char)i;
}
}
}
else if(is_digit(s[i+1])&&is_digit(s[i-1]))
{
ll a1=s[i-1]-'0';
ll a2=s[i+1]-'0';
for(ll k=a1+1;k<=a2-1;k++)
{
for(ll j=0;j<p2;j++)
{
cout<<k;
}
}
}
}
else if(p3
2)
{
if(!is_digit(s[i+1])&&!is_digit(s[i-1]))
{
char c1=s[i-1];
char c2=s[i+1];
if(is_upper(s[i-1]))c1=(char)(s[i-1]+32);
if(is_upper(s[i+1]))c2=(char)(s[i+1]+32);
ll a1=(int)c1;
ll a2=(int)c2;
for(ll k=a2-1;k>=a1+1;k--)
{
for(ll j=0;j<p2;j++)
{
cout<<(char)k;
}
}
}
else if(is_digit(s[i+1])&&is_digit(s[i-1]))
{
ll a1=s[i-1]-'0';
ll a2=s[i+1]-'0';
for(ll k=a2-1;k>=a1+1;k--)
{
for(ll j=0;j<p2;j++)
{
cout<<k;
}
}
}
}
}
else if(p12)
{
if(p3
1)
{
if(!is_digit(s[i+1])&&!is_digit(s[i-1]))
{
char c1=s[i-1];
char c2=s[i+1];
if(!is_upper(s[i-1]))c1=(char)(s[i-1]-32);
if(!is_upper(s[i+1]))c2=(char)(s[i+1]-32);
ll a1=(int)c1;
ll a2=(int)c2;
for(ll k=a1+1;k<=a2-1;k++)
{
for(ll j=0;j<p2;j++)
{
cout<<(char)k;
}
}
}
else if(is_digit(s[i+1])&&is_digit(s[i-1]))
{
ll a1=s[i-1]-'0';
ll a2=s[i+1]-'0';
for(ll k=a1+1;k<=a2-1;k++)
{
for(ll j=0;j<p2;j++)
{
cout<<k;
}
}
}
}
else if(p32)
{
if(!is_digit(s[i+1])&&!is_digit(s[i-1]))
{
char c1=s[i-1];
char c2=s[i+1];
if(!is_upper(s[i-1]))c1=(char)(s[i-1]-32);
if(!is_upper(s[i+1]))c2=(char)(s[i+1]-32);
ll a1=(int)c1;
ll a2=(int)c2;
for(ll k=a2-1;k>=a1+1;k--)
{
for(ll j=0;j<p2;j++)
{
cout<<(char)k;
}
}
}
else if(is_digit(s[i+1])&&is_digit(s[i-1]))
{
ll a1=s[i-1]-'0';
ll a2=s[i+1]-'0';
for(ll k=a2-1;k>=a1+1;k--)
{
for(ll j=0;j<p2;j++)
{
cout<<k;
}
}
}
}
}
else if(p1
3)
{
if(p31)
{
if(!is_digit(s[i+1])&&!is_digit(s[i-1]))
{
char c1=s[i-1];
char c2=s[i+1];
if(is_upper(s[i-1]))c1=(char)(s[i-1]+32);
if(is_upper(s[i+1]))c2=(char)(s[i+1]+32);
ll a1=(int)c1;
ll a2=(int)c2;
for(ll k=a1+1;k<=a2-1;k++)
{
for(ll j=0;j<p2;j++)
{
cout<<"";
}
}
}
else if(is_digit(s[i+1])&&is_digit(s[i-1]))
{
ll a1=s[i-1]-'0';
ll a2=s[i+1]-'0';
for(ll k=a1+1;k<=a2-1;k++)
{
for(ll j=0;j<p2;j++)
{
cout<<"
";
}
}
}
}
else if(p3
2)
{
if(!is_digit(s[i+1])&&!is_digit(s[i-1]))
{
char c1=s[i-1];
char c2=s[i+1];
if(is_upper(s[i-1]))c1=(char)(s[i-1]+32);
if(is_upper(s[i+1]))c2=(char)(s[i+1]+32);
ll a1=(int)c1;
ll a2=(int)c2;
for(ll k=a2-1;k>=a1+1;k--)
{
for(ll j=0;j<p2;j++)
{
cout<<"";
}
}
}
else if(is_digit(s[i+1])&&is_digit(s[i-1]))
{
ll a1=s[i-1]-'0';
ll a2=s[i+1]-'0';
for(ll k=a2-1;k>=a1+1;k--)
{
for(ll j=0;j<p2;j++)
{
cout<<"
";
}
}
}
}
}
}
}
else
{
cout<<s[i];
}
}

return 0;

}

http://www.jsqmd.com/news/798312/

相关文章:

  • 2026年4月市面上比较好的店铺设计装修批发厂家口碑推荐,服装店设计装修/店铺设计装修,店铺设计装修定制厂家推荐 - 品牌推荐师
  • 3分钟解锁QQ音乐加密格式:qmc-decoder音频解密工具完全指南
  • 从‘创建’到‘销毁’:一个RDMA Queue Pair的完整生命周期实战与状态机避坑指南
  • Spring Boot + JWT 实现无状态认证
  • VideoDownloadHelper:3步实现全网视频下载的智能工具
  • Matlab实战:基于EGM2008模型与球谐函数解析全球重力梯度场
  • 学习进度4/10
  • 深度解析:如何构建广谱注入Chromium/V8的通用修改器
  • YOLOv11 改进 - 注意力机制 ACmix自注意力与卷积混合模型:轻量级设计融合双机制优势,实现高效特征提取与推理加速
  • 别再只用Speedtest了!用群晖Docker部署Homebox,打造你的专属内网万兆测速站
  • 健康管理PPT风格描述提示词
  • Java面试跳槽需要提前准备什么内容?
  • 计算机毕业设计:Python医疗文本挖掘与可视化决策平台 Flask框架 随机森林 机器学习 疾病数据 智慧医疗 深度学习(建议收藏)✅
  • Sonos家庭影院音频设置指南:微调设置,提升音质与沉浸感!
  • 07 二叉树的最小深度
  • FanControl深度解析:如何为Windows打造智能静音散热系统
  • 5月重磅|2026苏州GEO优化公司TOP5实力盘点+GEO攻略+GEO优化 - 一网推GEO招财兔
  • 深度解析React核心机制:从组件到虚拟DOM的全面指南
  • H3C WA5320云AP瘦转胖实战:从BootWare升级到固件刷写的完整避坑指南
  • 梯度下降变体:SGD、Adam、RMSProp 对比实验
  • 数字的长征:从蒸汽机到智能体——可计算化革命的底层演进脉络
  • 【AI】FastFolders.exe v5.14.2 许可分析
  • 【实战指南】PLSQL Developer 13 从零配置到高效开发:安装、注册与核心功能详解
  • YOLOv11 改进 - 注意力机制 CascadedGroupAttention级联组注意力:动态感受野适配复杂场景,增强小目标特征捕获
  • 复杂SoC PMU管理:Q-Channel协议
  • vnc 7 主机参数设置-不能从客户端复制文本到主机
  • C++学习(26_05_11)
  • RouterOS一线多拨实战:从零配置到负载均衡策略深度解析
  • 2026年4月太阳膜品牌连锁店推荐,可靠的太阳膜连锁店,防雾功能太阳膜,雨天驾驶更安全 - 品牌推荐师
  • 一文搞懂:JWT(JSON Web Token)与Token认证——从结构剖析到签名算法,再到刷新与注销全攻略