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; 
}

  

原文地址:https://www.cnblogs.com/guangheli/p/10953361.html