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