给长度为$n$的$01字符串$,求区间长度是区间$1$个数的倍数的数量。$n\leq 2*10^5$
即求$r-l=k(pre[r]-pre[l])$个数。$pre[i]$为$[1,i]$中$1$的个数。
- $k\leq \sqrt T,r-pre[r]=l-pre[l]$暴力记录一下。
- $k > \sqrt T$,此时$pre[r]-pre[l]=\frac{r-l}{k}< \sqrt T$。暴力枚举每一个位置$l$,然后枚举$1$的个数。然后$O(1)$计算出可行的范围。(像我这么菜就是很多$if$)。
- 计算可行范围的时候控制$k>\sqrt T$
代码
1 |
|