过了样例,不知道自己哪错了。
#include<iostream>
#include<algorithm>
const int sz=2e5+10;
int pos[sz];
char add[3][sz];
bool same[sz];
int oppo(int x){
return x==1?2:1;
}
int main(){
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
int t;
std::cin>>t;
while(t--){
int k,q,cnt=0;
std::string s[3];
std::cin>>s[1]>>s[2]>>k>>q;
std::fill(pos+1,pos+q+1,0);
std::fill(add[1]+1,add[1]+q+1,0);
std::fill(add[2]+1,add[2]+q+1,0),cnt=0;
for(int i=0;i<s[1].length();i++)same[i]=s[1][i]==s[2][i],cnt+=same[i];
for(int i=1;i<=q;i++){
int op,a,x,b,y;
if(add[1][i]!=0){
s[1][pos[i]]=add[1][i],s[2][pos[i]]=add[2][i];
same[pos[i]]=s[1][pos[i]]==s[2][pos[i]];
if(!same[pos[i]])cnt--;
}
std::cin>>op;
if(op==3)std::cout<<(cnt==s[1].length()?"YES\n":"NO\n");
else if(op==2){
std::cin>>a>>x>>b>>y,x--,y--;
std::swap(s[a][x],s[b][y]);
if(same[x]!=(s[a][x]==s[oppo(a)][x])){
same[x]=s[a][x]==s[oppo(a)][x];
if(same[x])cnt++;
else cnt--;
}
if(same[y]!=(s[b][y]==s[oppo(b)][y])){
same[y]=s[b][y]==s[oppo(b)][y];
if(same[y])cnt++;
else cnt--;
}
}else{
std::cin>>x,x--;
pos[i+k]=x,add[1][i+k]=s[1][x],add[2][i+k]=s[2][x];
s[1][x]=s[2][x]=' ',cnt++,same[x]=true;
}
}
}
return 0;
}