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.
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
题意:题意:给定一个字符串,问有多少个三元组满足 i, j, k组成一个等比数列,并且s[i] = 'y', s[j] = 'r', s[k] = 'x',且j/i ,j/k中至少一个是整数。
暴力求解就ok
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
char s[10005];
int t;
scanf("%d",&t);
while(t--)
{
int cnt=0,i,j=2,len;
scanf("%s",s+1);
len=strlen(s+1);
for(i=1;i*4<=len;i++)
{
//printf("%d:\n",i);
for(j=2;i*j*j<=len;j++)
{
//printf("%d\n",i*j*j);
if(s[i]=='y'&&s[i*j]=='r'&&s[i*j*j]=='x')
cnt++;
if(s[i*j*j]=='y'&&s[i*j]=='r'&&s[i]=='x')
cnt++;
//printf("%d\n",cnt);
}
//printf("%d\n",cnt);
}
printf("%d\n",cnt);
}
return 0;
}