提交时间:2022-07-19 12:16:21

运行 ID: 52468

#include <bits/stdc++.h> using namespace std; typedef long long ll; int b[(ll)2e6][2][2]; string Turn(string s) { int l=s.size()-1; string ss=""; for(int i=0; i<=l; ++i) ss+=s[l-i]; return ss; } ll Hash(string s) { int l=s.size(); ll sum=0; for(int i=0; i<l; ++i) sum+=(i+27)*(s[i]-'a'); return sum; } int main() { ll h; int T,k; int num[2]; string r,str; string sa[2],sb[2]; //由a/b开始 cin>>T; for(int i=1; i<=T; ++i) { cin>>sa[0]>>r>>num[0]>>num[1]; sb[0]=sa[0]; k=1; while(1) { sa[k]=sa[!k]; str=sa[!k].substr(0,num[!k]); sa[k].erase(0,num[!k]); sa[k]+=str; sa[k]=Turn(sa[k]); if(sa[k]==r) { cout<<"yes\n"; break; } h=Hash(sa[k]); if(b[h][k][0]==i) { cout<<"no\n"; break; } b[h][k][0]=i; sb[k]=sb[!k]; str=sb[!k].substr(0,num[k]); sb[k].erase(0,num[k]); sb[k]+=str; sb[k]=Turn(sb[k]); if(sb[k]==r) { cout<<"yes\n"; break; } h=Hash(sb[k]); if(b[h][!k][1]==i) { cout<<"no\n"; break; } b[h][!k][1]=i; k=!k; } } return 0; }