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

      

  • 相关阅读:
    【Scrum】2.18
    【scrum】2.22
    绿色软件 Vs 安装软件
    【Scrum】2.21
    【scrum】2.15
    读《design pattern》有感
    让广告再播一会儿~
    Qt::日志处理
    终于在博客园开通了
    惹毛程序员的十件事
  • 原文地址:https://www.cnblogs.com/guangheli/p/10953361.html
Copyright © 2020-2023  润新知