Problem Description
Young theoretical computer scientist Fxx get a string which contains lowercase letters only.
The string S contains n lowercase letters S1S2…Sn.Now Fxx wants to know how many three tuple (i,j,k) there are which can meet the following conditions:
1、i,j,k are adjacent into a geometric sequence.
2、Si='y',Sj='r',Sk='x'.
3.Either j|i or j|k
Input
In the first line, there is an integer T(1≤T≤100) indicating the number of test cases.
T lines follow, each line contains a string, which contains only lowercase letters.(The length of string will not exceed 10000).
Output
For each case, output the answer.
Sample Input
2
xyyrxx
yyrrxxxxx
Sample Output
0
Young theoretical computer scientist Fxx get a string which contains lowercase letters only.
The string S contains n lowercase letters S1S2…Sn.Now Fxx wants to know how many three tuple (i,j,k) there are which can meet the following conditions:
1、i,j,k are adjacent into a geometric sequence.
2、Si='y',Sj='r',Sk='x'.
3.Either j|i or j|k
Input
In the first line, there is an integer T(1≤T≤100) indicating the number of test cases.
T lines follow, each line contains a string, which contains only lowercase letters.(The length of string will not exceed 10000).
Output
For each case, output the answer.
Sample Input
2
xyyrxx
yyrrxxxxx
Sample Output
0
2
字符串的长度为n\:nn,下标从1开始,第i\:i\:i位的字母为si\:s_isi,现在Fxx想知道有多少三元组(i,j,k)\:(i,j,k)\:(i,j,k)满足下列条件
1、i,j,ki,j,k\:i,j,k三个数成等比数列
2、si=s_i=si='yyy',sj=,s_j=,sj='rrr',sk=,s_k=,sk='xxx'
3.i/ji/ji/j和k/jk/jk/j中必须有整数
这段对于语文水平不好的我实在是读不懂,最后还是承认自己多想了,就是考虑公比是大于1还是小于1的就行。
#include <iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
char s[10005];//si=s_i=si='yyy',sj=,s_j=,sj='rrr',sk=,s_k=,sk='xxx'
int main()
{
int T,i,j,k,q,sum;
cin>>T;
while(T--)
{
scanf("%s",s);
int l=strlen(s);
sum=0;
for(int r=0;r<l;r++)
{
i=r+1;
for(q=2;;q++)//枚举公比
{
j=i*q;
k=j*q;
if(k>l) break;
if(s[i-1]=='y'&&s[j-1]=='r'&&s[k-1]=='x')
sum++;
if(s[i-1]=='x'&&s[j-1]=='r'&&s[k-1]=='y')//小于1的公比
sum++;
}
}
cout<<sum<<endl;
}
return 0;
}