CF做题记录--2023.9.25

1385D. a-Good String Problem - 1385D - Codeforces

定义:字符串s 为一个c-好串(c 为一个字符)时,必须满足:

  1. 当∣s∣=1 ,=c

  2. 当∣s∣>1, s 的左半部分为全为 c,右半部分为一个 (c+1)-好串 或者 s 的右半部分为全为 c,左半部分为一个 (c+1)-好串

其中 ∣s∣ 代表 字符串 s 的长度。

举个例子:s=“cdbbaaaa"时,s 是一个 a-好串

现在,给你一个字符串 s (∣s∣=2^k),问最少替换多少个字符,使其为一个 a-好串

思路

递退题

首先写递推函数F(cur,x),F计算当前字符串变为x-好字符串所需要的最小次数

那么考虑最终情况:cur长度为1时,返回cur[0]!=x

对于中间状态,一定是将左/右子串变为全x,再考虑下一层。

因此,分别计算将左右子串变为全x的操作次数l和r,再返回min(l,r)。

也就:

R=s.size() / 2 - count(s.begin() + mid, s.end(), x);//计算当前层将右子串全变为x的操作数

R+=f(s.substr(0, mid), x + 1);//递推左子串

同理于L

 总结:不会写递推函数,要多练

1538F. Interesting Function Problem - 1538F - Codeforces 

给定两个正整数 ,r(l<r),将 l 不断加 1 直到 l=r,求出这一过程中 l 发生变化的位数总数

位数变化指:

  • l=909,将 l+1 后有 2 位数字发生变化。
  • l=9,将l+1 后也有 2 位数字发生变化。
  • l=489999,将 l+1 后有 5 位数字发生变化。

而总数指:

  • l=10,r=20,个位变化了10 次,十位变化了 1 次,所以总数为 11。

思路

弔题

从右往左看,对i位,设该位会进行x次变化。

那么ans=\sumxi,xi等于[r-i]-[l-i]

[r-i]表示r从右往左的前i位去掉后的数r`

1520D. Same Differences Problem - D - Codeforces

给一个由 n 个整数组成的数组 a。请数出索引 (i,j)中有多少对索引 i<j和 aj−ai=j−i。

思路

水题,数据结构

转换一下公式就是aj-j=ai-i

那么只要储存所有ax-x,然后对每个相同值计数cntx,要是cnt>1,那么ans+=cnt*(cnt-1)/2

做题ing~ 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值