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总数。

位数变化指:

  • 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

思路

水题,数据结构

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

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

做题ing~ 

你可能感兴趣的:(算法,笔记,c++)