提交时间:2022-07-19 11:51:53

运行 ID: 52297

#include <iostream> #include <cstdio> using namespace std; const int MAXN=5E5+10; int T,a,b; char s[MAXN],r[MAXN]; int Length(char * str) { int len=0; while('a'<=str[len]&&str[len]<='z') len++; return len; } bool check(char *s,char *r) { for(int i=0;i<Length(s);i++) { if(s[i]!=r[i]) return false; } return true; } bool FUCK(char *s,char *r,int flag,int tot) { tot++; if(tot>14460) return false; if(check(s,r)) return true; int len=Length(s); if(flag==0) //choose a { char str[len]; for(int i=0;i<a;i++) str[i]=s[i]; for(int i=a;i<len;i++) s[i-a]=s[i]; for(int i=len-a,j=0;j<a;i++,j++) s[i]=str[j]; for(int i=0,j=len-1;i<len,j>=0;i++,j--) swap(s[i],s[j]); return FUCK(s,r,1,tot); } else { char str[len]; for(int i=0;i<b;i++) str[i]=s[i]; for(int i=a;i<len;i++) s[i-b]=s[i]; for(int i=len-b,j=0;j<a;i++,j++) s[i]=str[j]; for(int i=0,j=len-1;i<len,j>=0;i++,j--) swap(s[i],s[j]); return FUCK(s,r,0,tot); } return false; } int main() { scanf("%d",&T); while(T--) { scanf("%s%s%d%d",s,r,&a,&b); if(check(s,r)) { printf("yes\n"); continue; } if(FUCK(s,r,0,0)) printf("yes\n"); else if(FUCK(s,r,1,0)) printf("yes\n"); else printf("no\n"); } return 0; }