题目链接:​​点击打开链接​

Fxx and string



Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)


Total Submission(s): 97    Accepted Submission(s): 47




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


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


 



Source


​BestCoder Round #89 ​




问题描述


青年理论计算机科学家Fxx得到了一个只包含小写字母的字符串。

字符串的长度为\:nn,下标从1开始,第\:i\:i位的字母为\:s_isi,现在Fxx想知道有多少三元组\:(i,j,k)\:(i,j,k)满足下列条件

1、i,j,k\:i,j,k三个数成等比数列

2、s_i=si='yy',s_j=,sj='rr',s_k=,sk='xx'

3.i/ji/j和k/jk/j中必须有整数


输入描述


第一行一个整数\:T(1\leq T\leq100)\:T(1≤T≤100)表示数据组数。

接下来\:T\:T行,每行一个仅包含小写字母的字符串(字符串长度不超过\:1000010000)


输出描述


输出共\:T\:T行。

每行一个整数表示答案。


输入样例


2 xyyrxx yyrrxxxxx


输出样例


0 2


思路:刚开始只考虑了公比大于 1 的情况,唉

#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
char str[10010];
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%s",str+1);
int len=strlen(str+1);
int ans=0;
for(int i=1;i*4<=len;i++)
{
if(str[i]=='y')
{
int cnt=2;
while(i*cnt*cnt<=len)
{
if(str[i*cnt]=='r'&&str[i*cnt*cnt]=='x')
ans++;
cnt++;
}
}
if(str[i]=='x')
{
int cnt=2;
while(i*cnt*cnt<=len)
{
if(str[i*cnt]=='r'&&str[i*cnt*cnt]=='y')
ans++;
cnt++;
}
}
}
printf("%d\n",ans);
}
return 0;
}