提交时间:2022-07-19 11:51:20
运行 ID: 52262
#include<cstdio> #include<algorithm> #include<cstring> #include<iostream> #include<cmath> using namespace std; const int N=5e5+10; int t; int a,b,len,d,n; char x[N],y[N],rx[N]; int gcd(int p,int q) { int r; while(q) r=p%q,p=q,q=r; return p; } int hsa[N],hsb[N],mul[N]; int query(int l,int r) { return hsa[r]-hsa[l-1]*mul[r-l+1]; } int gt(int x) { return query(x+1,len)*mul[x]+query(1,x); } int main() { // freopen("runes.in","r",stdin); // freopen("runes.out","w",stdout); scanf("%d",&t); mul[0]=1; for(int i=1;i<=500000;i++) mul[i]=mul[i-1]*233; while(t--) { cin>>x+1>>y+1; len=strlen(x+1); scanf("%d %d",&a,&b); d=gcd(abs(a-b),len); for(int i=1;i<=len;i++) hsb[i]=hsb[i-1]*233+(y[i]-'a'),hsa[i]=hsa[i-1]*233+(x[i]-'a'); if(len%d) n=len/d+1; else n=len/d; bool chk1=0; for(int i=1;i<=n;i++) { if(gt(i*d)==hsb[len]) { chk1=1; break; } } int now=a; for(int i=1;i<=a;i++) rx[i]=x[now--]; now=len; for(int i=a+1;i<=len;i++) rx[i]=x[now--]; for(int i=1;i<=len;i++) hsa[i]=hsa[i-1]*233+(rx[i]-'a'); bool chk2=0; for(int i=1;i<=n;i++) { if(gt(i*d)==hsb[len]) { chk2=1; break; } } if(chk1||chk2) printf("yes\n"); else printf("no\n"); for(int i=1;i<=len;i++) hsa[i]=hsb[i]=0; } // fclose(stdin); // fclose(stdout); return 0; }