CF1168B Good Triple 性质分析_好题
题意翻译
给出01串s,求数对[l,r]个数,使得能找到至少一对[x,k],使1<=x,k<=|s|且l<=x<x+2k<=r且s[x]=s[x+k]=s[x+2k]
题解:
这是一个 01 串........这个性质不是白给的QAQ......
考虑暴力,复杂度貌似是 $n^2$ 级别的.
然而,我们发现每一个区间长度不会超过 9, 直接暴力解决即可.
Code:
#include<bits/stdc++.h>
#define maxn 1000000
#define setIO(s) freopen(s".in","r",stdin)
using namespace std;
int n;
char str[maxn];
int main(){
// setIO("input");
int r;
scanf("%s",str+1),n=strlen(str+1),r=n+2;
long long ans=0;
for(int i=n-1;i>=1;--i){
for(int j=1;i+2*j<=n;++j) {
if(str[i]==str[i+j]&&str[i+j]==str[i+2*j])
{
r=min(r,i+2*j);
break;
}
}
ans += (long long)max(n-r+1,0);
}
cout<<ans<<endl;
return 0;
}