Beautiful string(rms2017模拟1-1)*【推理】

该博客讨论了如何确定最长的超级优美无敌串,其中串由最优美的字母O和X组成,满足特定条件。文章通过分析给出了当O或X不足时的解决方案,并提供了时间复杂度和空间复杂度均为O(1)的算法思路。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Beautiful string(bs.cpp)
试题描述
WSM 认为 O 和 X 是最优美的两个字母,由它们组成的串最优美。在这些最优美的串
中,如果任意只包含X的子串,长度不超过maxX,任意只包含O的子串,长度不超过maxO, 且整个串最多有 countO个O,countX个X。那么这个就是超级优美无敌串。 现在WSM想知道最长的超级优美无敌串有多长,希望你能告诉她。
输入格式
输入包含多行,至文件结束为止; 每行四个数,依次是 CountO、CountX、maxO、maxX。
输出格式
每组数据输出一行,一个数表示最长的超级优美无敌串的长度。
数据规模
0<=CountO,CountX,maxO,maxX<=1000000
输入样例
10 10 0 0 3 5 1 1
输出样例
0 7
注意事项: 第二个样例的解释:“XOXOXOX”. 最多 1000 组数据,其中 30%的数据 0<=CountO,CountX,maxO,maxX<=20,且数据组数
不超过 20 组。

题解
如果maxO是零的话,说明就只有一段X。答案就是maxX,maxX是零也是同理。
现在考虑剩余的情况 ,我们先假设X不够用,说明就算是每次放maxO个O,然后用一个X把它们隔开,这种情况X还是不够用。
OOO…OOOXOOO…OOOXOOO…OOO…;
也就是说:CountO > (CountX+1) * maxO;
那么答案最大就只有可能是CountX + (CountX+1) * maxO。
同理O不够的情况也是如此。对于剩下的情况,答案就是CountX + CountO。值得注意的是,在计算(CountX

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值