题目链接:
https://codeforces.com/contest/1168/problem/B
题目大意:
问你有多少个区间,满足
1≤x,k≤n1≤x,k≤n, l≤x<x+2k≤rl≤x<x+2k≤r, sx=sx+k=sx+2ksx=sx+k=sx+2k.
具体思路:
看了题解,每一次是记录当前这个区间 [ l , r ] ,是否有可行解。如果有可行解的话,这一段对答案的贡献就是右端点到len的距离。(手写了几个样例,发现长度超过9的时候,就基本一定有满足题目条件的区间,因为都是0 和1 )。
AC代码:
1 #include<bits/stdc++.h>
2 using namespace std;
3 # define ll long long
4 # define inf 0x3f3f3f3f
5 # define int ll
6 const int maxn = 2e6 + 100;
7 char str[maxn];
8 signed main()
9 {
10 scanf("%s",str);
11 int len=strlen(str);
12 int ans=0;
13 for(int i=0; i<len; i++)
14 {
15 for(int j=i; j<len; j++)
16 {
17 int flag=0;
18 for(int k=1; j-(2*k)>=i; k++)
19 {
20 if(str[j]==str[j-k]&&str[j-2*k]==str[j])
21 {
22 ans+=len-j;
23 flag=1;
24 break;
25 }
26 }
27 if(flag)
28 break;
29 }
30 }
31 printf("%lld
",ans);
32 return 0;
33 }