RE求教
查看原帖
RE求教
957501
syp11楼主2024/12/2 15:50

机房同学使用以下代码在linux系统和Windows系统上都可以正常跑完测试样例,没有RE(尽管可能会WA),但是在洛谷上评测时就有一车的RE,究竟是为什么,死亡回放

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+5;
int T;
int n;
pair<int,int> p1[N],p2[N];
int n1[N][3],n2[N][3];
int max_1,max_2;
signed main(){
    freopen("edit.in","r",stdin);
    freopen("edit.out","w",stdout);
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    cin>>T;
    while(T--){
        int ans=0;
        max_1=max_2=0;
        string s1,s2,t1,t2;
        cin>>n>>s1>>s2>>t1>>t2;
        bool ok=1;
        for(int i=1;i<n;++i){
            if(s1[i]!=s1[i-1]){
                ok=0;
                break;
            }
        }
        if(ok){
            for(int i=0;i<n;++i){
                t1[i]='0';
            }
        }
        pair<int,int>dq={0,0};
        int zzn=0,oon=0;
        bool ui=0;
        t1[n]=t2[n]='0';
        for(int i=0;i<=n;++i){
            if(t1[i]=='1'){
                if(ui){
                    dq.second=i;
                }else{
                    dq.first=i;
                    dq.second=i;
                    ui=true;
                }
                if(s1[i]=='1'){
                    ++oon;
                }else{
                    ++zzn;
                }
            }else{
                if(dq.second!=dq.first){
                    p1[max_1]=dq;
                    n1[max_1][0]=zzn;
                    n1[max_1][1]=oon;
                    ++max_1;
                }
                zzn=oon=ui=dq.first=dq.second=0;
            }
        }
        for(int i=0;i<=n;++i){
            if(t2[i]=='1'){
                if(ui){
                    dq.second=i;
                }else{
                    dq.first=i;
                    dq.second=i;
                    ui=true;
                }
                if(s2[i]=='1'){
                    ++oon;
                }else{
                    ++zzn;
                }
            }else{
                if(dq.second!=dq.first){
                    p2[max_2]=dq;
                    n2[max_2][0]=zzn;
                    n2[max_2][1]=oon;
                    ++max_2;
                }
                zzn=oon=ui=dq.first=dq.second=0;
            }
        }
        int fff=0;
        for(int j=0;j<p1[0].first;++j){
            if(j>p2[fff].second){
                for(;j>p2[fff].second;++fff);
            }
            if(p2[fff].first<=j&&j<=p2[fff].second){
                if(n2[fff][s1[j]-'0']){
                    --n2[fff][s1[j]-'0'];
                    ++ans;
                }
            }else{
                if(s1[j]==s2[j]){
                    ++ans;
                }
            }
        }
        for(int i=1;i<max_1;++i){
            for(int j=p1[i-1].second+1;j<p1[i].first;++j){
                if(j>p2[fff].second){
                    for(;j>p2[fff].second;++fff);
                }
                if(p2[fff].first<=j&&j<=p2[fff].second){
                    if(n2[fff][s1[j]-'0']){
                        --n2[fff][s1[j]-'0'];
                        ++ans;
                    }
                }else{
                    if(s1[j]==s2[j]){
                        ++ans;
                    }
                }
            }
        }
        for(int j=p1[max_1-1].second+1;j<n;++j){
            if(j>p2[fff].second){
                for(;j>p2[fff].second;++fff);
            }
            if(p2[fff].first<=j&&j<=p2[fff].second){
                if(n2[fff][s1[j]-'0']){
                    --n2[fff][s1[j]-'0'];
                    ++ans;
                }
            }else{
                if(s1[j]==s2[j]){
                    ++ans;
                }
            }
        }
        fff=0;
        for(int j=0;j<p2[0].first;++j){
            if(j>p1[fff].second){
                for(;j>p1[fff].second;++fff);
            }
            if(p1[fff].first<=j&&j<=p1[fff].second){
                if(n1[fff][s2[j]-'0']){
                    --n1[fff][s2[j]-'0'];
                    ++ans;
                }
            }
        }
        for(int i=1;i<max_2;++i){
            for(int j=p2[i-1].second+1;j<p2[i].first;++j){
                if(j>p1[fff].second){
                    for(;j>p1[fff].second;++fff);
                }
                if(p1[fff].first<=j&&j<=p1[fff].second){
                    if(n1[fff][s2[j]-'0']){
                        --n1[fff][s2[j]-'0'];
                        ++ans;
                    }
                }
            }
        }
        for(int j=p2[max_2-1].second+1;j<n;++j){
            if(j>p1[fff].second){
                for(;j>p1[fff].second;++fff);
            }
            if(p1[fff].first<=j&&j<=p1[fff].second){
                if(n1[fff][s2[j]-'0']){
                    --n1[fff][s2[j]-'0'];
                    ++ans;
                }
            }
        }
        for(int i=0,j=0;i<max_1&&j<max_2;){
            pair<int,int>jiao={max(p1[i].first,p2[j].first),min(p1[i].second,p2[j].second)};
            while(jiao.second<jiao.first){
                if(p1[i].second<p2[j].first){
                    ++i;
                }else{
                    ++j;
                }
                jiao=make_pair(max(p1[i].first,p2[j].first),min(p1[i].second,p2[j].second));
            }
            int mx=jiao.second-jiao.first+1;
            int djl=min(n2[j][0],min(n1[i][0],mx));
            ans+=djl;
            n2[j][0]-=djl;
            n1[i][0]-=djl;
            mx-=djl;
            djl=min(n2[j][1],min(n1[i][1],mx));
            ans+=djl;
            n2[j][1]-=djl;
            n1[i][1]-=djl;
            if(p1[i].second<p2[j].first){
                ++i;
            }else if(p1[i].second>p2[j].first){
                ++j;
            }else{
                ++i,++j;
            }
        }
        cout<<ans<<'\n';
    }
    cout.flush();
    return 0;
}
2024/12/2 15:50
加载中...