CF E 求调
  • 板块学术版
  • 楼主shinzanmonoszm 妹妹
  • 当前回复4
  • 已保存回复4
  • 发布时间2023/6/7 00:56
  • 上次更新2023/10/23 13:47:09
查看原帖
CF E 求调
610557
shinzanmonoszm 妹妹楼主2023/6/7 00:56

过了样例,不知道自己哪错了。

#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;
}
2023/6/7 00:56
加载中...