1385D. a-Good String Problem - 1385D - Codeforces
定义:字符串s
为一个c-好串
(c 为一个字符)时,必须满足:
-
当∣s∣=1 ,=c
-
当∣s∣>1, s 的左半部分为全为 c,右半部分为一个
(c+1)-好串
或者 s 的右半部分为全为 c,左半部分为一个(c+1)-好串
其中 ∣s∣ 代表 字符串 s 的长度。
举个例子:s=“cdbbaaaa"时,s 是一个 a-好串
现在,给你一个字符串 s (∣s∣=),问最少替换多少个字符,使其为一个 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=xi,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~