一个很奇怪的点

P1188 PASTE

Sun_Email @ 2023-07-20 20:19:22

这份代码是WA的,70分

这份代码是AC的,100分

差异之处被我用注释标出来了

求助为什么第一份代码WA了而第二份AC了


by _zzzzzzy_ @ 2023-07-20 20:20:41

@Sun_Email 能发一下代码吗


by Sun_Email @ 2023-07-20 20:23:31

行吧

WA:

#include<bits/stdc++.h>
using namespace std;
int n,k,nxt[100010],t1,t2,t3;
int main(){
    scanf("%d%d",&n,&k);
    for(int i=1;i<=n;++i){
        nxt[i]=i+1;
    }
    nxt[n]=0;
    nxt[0]=1;
    //a~b swap c+1~c+b-a+1
    for(int i=1,u,v,w;i<=k;++i){
        scanf("%d%d%d",&u,&v,&w);
        t1=t2=t3=0;
        if(w>=u){
            w+=v-u+1;
        }
        for(int i=nxt[0],j=1;i;i=nxt[i],++j){
            if(j==u-1){
                t1=i;
            }
            if(j==v){
                t2=i;
                if(t1&&t3){
                    break;
                }
            }
            if(j==w){
                t3=i;
                if(t1&&t2){
                    break;
                }
            }
        }
//      int IAKIOI=nxt[t1];
//      nxt[t1]=nxt[t2];
//      nxt[t2]=nxt[t3];
//      nxt[t3]=IAKIOI;
        int IAKIOI=nxt[t3];
        nxt[t3]=nxt[t1];
        nxt[t1]=nxt[t2];
        nxt[t2]=IAKIOI;
    }
    for(int i=nxt[0],j=1;j<=10;++j,i=nxt[i]){
        printf("%d\n",i);
    }
    return 0;
}

AC:```cpp

include<bits/stdc++.h>

using namespace std; int n,k,nxt[100010],t1,t2,t3; int main(){ scanf("%d%d",&n,&k); for(int i=1;i<=n;++i){ nxt[i]=i+1; } nxt[n]=0; nxt[0]=1; //a~b swap c+1~c+b-a+1 for(int i=1,u,v,w;i<=k;++i){ scanf("%d%d%d",&u,&v,&w); t1=t2=t3=0; if(w>=u){ w+=v-u+1; } for(int i=nxt[0],j=1;i;i=nxt[i],++j){ if(j==u-1){ t1=i; } if(j==v){ t2=i; if(t1&&t3){ break; } } if(j==w){ t3=i; if(t1&&t2){ break; } } } int IAKIOI=nxt[t1]; nxt[t1]=nxt[t2]; nxt[t2]=nxt[t3]; nxt[t3]=IAKIOI; // int IAKIOI=nxt[t3]; // nxt[t3]=nxt[t1]; // nxt[t1]=nxt[t2]; // nxt[t2]=IAKIOI; } for(int i=nxt[0],j=1;j<=10;++j,i=nxt[i]){ printf("%d\n",i); } return 0; }



@[zhangzhengyan0831](/user/715244)

by Sun_Email @ 2023-07-20 20:24:24

#include<bits/stdc++.h>
using namespace std;
int n,k,nxt[100010],t1,t2,t3;
int main(){
    scanf("%d%d",&n,&k);
    for(int i=1;i<=n;++i){
        nxt[i]=i+1;
    }
    nxt[n]=0;
    nxt[0]=1;
    //a~b swap c+1~c+b-a+1
    for(int i=1,u,v,w;i<=k;++i){
        scanf("%d%d%d",&u,&v,&w);
        t1=t2=t3=0;
        if(w>=u){
            w+=v-u+1;
        }
        for(int i=nxt[0],j=1;i;i=nxt[i],++j){
            if(j==u-1){
                t1=i;
            }
            if(j==v){
                t2=i;
                if(t1&&t3){
                    break;
                }
            }
            if(j==w){
                t3=i;
                if(t1&&t2){
                    break;
                }
            }
        }
        int IAKIOI=nxt[t1];
        nxt[t1]=nxt[t2];
        nxt[t2]=nxt[t3];
        nxt[t3]=IAKIOI;
//      int IAKIOI=nxt[t3];
//      nxt[t3]=nxt[t1];
//      nxt[t1]=nxt[t2];
//      nxt[t2]=IAKIOI;
    }
    for(int i=nxt[0],j=1;j<=10;++j,i=nxt[i]){
        printf("%d\n",i);
    }
    return 0;
}

@zhangzhengyan0831


by _zzzzzzy_ @ 2023-07-20 20:26:02

@Sun_Email e,就是交换换了一下是吧


by Sun_Email @ 2023-07-20 20:26:44

对 @zhangzhengyan0831


by _zzzzzzy_ @ 2023-07-20 20:32:26

@Sun_Email 你应该自己手搓一下就是了吧


by Sun_Email @ 2023-07-20 20:34:04

呃 手搓是什么

@zhangzhengyan0831


by _zzzzzzy_ @ 2023-07-20 20:34:48

@Sun_Email 手动模拟


|