提交时间:2022-07-19 12:35:28

运行 ID: 52522

#include<bits/stdc++.h> #define N 500005 using namespace std; int gcd(int a,int b){return !b?a:gcd(b,a%b);} char S[N],R[N],tmp[N]; int T,a,b,m,n; bool f; inline bool check(string c,int x){ for(int i(1);i<=(x>>1);++i) swap(c[i],c[x-i+1]); for(int i(1);i<=(n-x>>1);++i) swap(c[x+i],c[n-i+1]); for(int j(1);j<=n;++j) if(S[j]^R[j]) return 0; return 1; } int main(){ scanf("%d",&T); while(T--){ scanf("%s%s",S+1,R+1); scanf("%d%d",&a,&b); m=abs(a-b); for(n=1;S[n];++n);--n; for(int i(n/gcd(n,m));i>=1;--i){ for(int j(1);j<=m;++j) tmp[j]=S[n+j-m]; for(int j(n);j>m;--j) S[j]=S[j-m]; for(int j(1);j<=m;++j) S[j]=tmp[j]; f=1;for(int j(1);j<=n;++j)if(S[j]^R[j]){f=0;break;} if(f&&!check(S,a)&&!check(S,b)) f=0; if(f) break; } puts(f?"yes":"no"); for(int i(1);i<=n;++i) S[i]=R[i]=0; } return 0; }