提交时间:2022-07-19 11:56:12
运行 ID: 52348
#include<bits/stdc++.h> #define fst(a,b,c) for(int a=(b);a<=(c);a++) #define pst(a,b,c) for(int a=(b);a>=(c);a--) using namespace std; const int N=5e5+100,Mod=19491001; int a,b,dlt; int n,pre[N],suf[N],tar; char s[N],t[N]; int Add(int x,int y){return (x+y>=Mod)?x+y-Mod:x+y;} int Mul(int x,int y){return 1ll*x*y%Mod;} int Qp(int x,int y,int z=1){while(y){if(y&1) z=Mul(z,x); x=Mul(x,x); y>>=1;} return z;} int gcd(int x,int y){return y?gcd(y,x%y):x;} void Main(){ memset(pre,0,sizeof(pre)); memset(suf,0,sizeof(suf)); scanf("%s%s",s,t); n=strlen(s); scanf("%d%d",&a,&b); if(a>b) swap(a,b); dlt=b-a; pre[0]=s[0]-'a'+1; fst(i,1,n-1) pre[i]=Add(Mul(pre[i-1],26),s[i]-'a'+1); pst(i,n-1,0) suf[i]=Add(suf[i+1],Mul(s[i]-'a'+1,Qp(26,n-1-i))); tar=t[0]-'a'+1; fst(i,1,n-1) tar=Add(Mul(tar,26),t[i]-'a'+1); if(pre[n-1]==tar){puts("yes"); return;} fst(i,0,n-1){ if(tar==Add(Mul(suf[i+1],Qp(26,i+1)),pre[i])){ if(!((i+1)%gcd(dlt,n))){ puts("yes"); return; } } } puts("no"); } int main(){ // freopen("runes.in","r",stdin); // freopen("runes.out","w",stdout); int T; scanf("%d",&T); while(T--) Main(); return 0; } /* 3 ljhelloh hellohlj 2 4 thisisastr htrtsasisi 3 5 abcde bcdea 1 4 */