1.题目链接。题意比较简单,想表达的意思就是(i,j,k)是等比数列的相邻的三项,Si='y',Sj='r',Sk='x'.满足这些条件。而且第三点还强调了,j必须是中间项。
2.直接枚举一下公比完事了。
#include<bits/stdc++.h>
using namespace std;
const int maxn = 10010;
char s1[maxn],s[maxn];
#pragma warning(disable:6031)
int main()
{
int T;
scanf("%d", &T);
while (T--)
{
scanf("%s", s1);
int len = strlen(s1);
for (int i = 1; i <= len; i++)
{
s[i] = s1[i - 1];
}
int ans = 0;
for (int q = 2; q <= 100; q++)
{
for (int i =1; i <=len; i++)
{
int j = i * q;
int k = j * q;
if (j <= len && k <= len&&s[i] == 'y' && s[j] == 'r' && s[k] == 'x')ans++;
}
}
for (int q = 2; q <= 100; q++)
{
for (int k = 1; k <= len; k++)
{
int j = k * q;
int i = j * q;
if (i <= len && j <= len&&s[k] == 'x' && s[j] == 'r' && s[i] == 'y')ans++;
}
}
cout << ans << endl;
}
}