\:nn,下标从1开始,第\:i\:i位的字母为\:s_is?i??,现在Fxx想知道有多少三元组\:(i,j,k)\:(i,j,k)满足下列条件 1、i,j,k\:i,j,k三个数成等比数列 2、s_i=s?i??=‘yy‘,s_j=,s?j??=‘rr‘,s_k=,s?k??=‘xx‘ 3.i/ji/j和k/jk/j中必须有整数\:nn,下标从1开始,第\:i\:i位的字母为\:s_is?i??,现在Fxx想知道有多少三元组\:(i,j,k)\:(i,j,k)满足下列条件 1、i,j,k\:i,j,k三个数成等比数列 2、s_i=s?i??=‘yy‘,s_j=,s?j??=‘rr‘,s_k=,s?k??=‘xx‘ 3.i/ji/j和k/jk/j中必须有整数\:nn,下标从1开始,第\:i\:i位的字母为\:s_is?i??,现在Fxx想知道有多少三元组\:(i,j,k)\:(i,j,k)满足下列条件 1、i,j,k\:i,j,k三个数成等比数列 2、s_i=s?i??=‘yy‘,s_j=,s?j??=‘rr‘,s_k=,s?k??=‘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\n",ans); } return 0; }
时间: 2024-11-06 12:24:40