: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中必须有整数: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中必须有整数: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中必须有整数
题意确实有点不清晰,第3点应该是i必须被j整除且j必须被k整除,之后就是循环i,枚举q,暴力解题
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
char a[10010];
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%s",a+1);
int ans=0;
int n=strlen(a+1);
for(int i=1; i<=n; i++)
{
if(a[i]=='y')
for(int j=2; i*j*j<=n; j++)
{
if(a[i*j]=='r'&&a[i*j*j]=='x') ans++;
}
}
for(int i=n; i>=1; i--)
{
if(a[i]=='y')
for(int j=2; i/j/j>=1; j++)
{
if((i%j)||(i%(j*j))) continue;
if(a[i/j]=='r'&&a[i/j/j]=='x') ans++;
}
}
printf("%d
",ans);
}
return 0;
}
View Code