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
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 手动模拟