Codeforces 54D Writing a Song

题意

给定字符串p和一个pos数组,输出一个只使用前k个字母的n长度字符串,要求在pos[i]==1的位置匹配p,在pos[i]==0的位置不匹配。

题解

先准备一个空的ans数组,然后在pos[i]==1的位置填入p,期间判断合法性。

然后再判断一下pos[i]==0的位置是否非法。

最后往空的位置填字符,如果p由单种字母组成即p的周期为1,这种比较简单直接填不是p[0]的字母就行。如果p由至少两种字母组成,那么就填p[0],现证明:

假如i为某空位置,那么pos[i]必为0。如果填入p[0]可能造成其不合法,那么必然后面某j位置有pos[j]==1。假设从i位置往后x个位置为第一个不为p[0],从j位置往后y个位置第一个不为p[0],那么必有x>y(i和j中间pos为0的位置都填入了p[0]),因此必有ans[i:i+len(p)-1]≠p,。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值