感觉是等价的写法,为啥一个过了,一个没过呢

P1188 PASTE

2233颗GoldenEgg @ 2022-10-27 23:20:20

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int n,k,ne[N];
inline int read()
{
  int x=0;char ch=getchar();
  while(ch<'0'||ch>'9') ch=getchar();
  while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();
  return x;
}
int main()
{
  n=read();k=read();
  for(int i=0;i<n;i++) ne[i]=i+1;
  ne[n]=0;
  for(int Times=1;Times<=k;Times++)
  {
    int a=read(),b=read(),c=read();
    if(c>=a) c+=b-a+1;
    int posa=-1,posb=-1,posc=-1,pos_now=0;
    for(int j=0;;j++)
    {
      if(posa!=-1&&posb!=-1&&posc!=-1) 
      {
        break;
      }
      if(j==a-1) 
      {
        posa=pos_now;
      }
      if(j==b) 
      {
        posb=pos_now;
      }
      if(j==c) posc=pos_now;
      pos_now=ne[pos_now];
    }
    int tmp_1=ne[posa],t=ne[posc];
    ne[posa]=ne[posb];
    ne[posc]=tmp_1;
    ne[posb]=t;
  }
  int pnow=ne[0]; 
  for(int i=1;i<=10;i++)
  {
    printf("%d\n",pnow);
    pnow=ne[pnow];
  }
  system("pause");
  return 0;
}

这是80分代码。

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int n,k,ne[N];
inline int read()
{
  int x=0;char ch=getchar();
  while(ch<'0'||ch>'9') ch=getchar();
  while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();
  return x;
}
int main()
{
  n=read();k=read();
  for(int i=0;i<n;i++) ne[i]=i+1;
  ne[n]=0;
  for(int Times=1;Times<=k;Times++)
  {
    int a=read(),b=read(),c=read();
    if(c>=a) c+=b-a+1;
    int posa=-1,posb=-1,posc=-1,pos_now=0;
    for(int j=0;;j++)
    {
      if(posa!=-1&&posb!=-1&&posc!=-1) 
      {
        break;
      }
      if(j==a-1) 
      {
        posa=pos_now;
      }
      if(j==b) 
      {
        posb=pos_now;
      }
      if(j==c) posc=pos_now;
      pos_now=ne[pos_now];
    }
    int tmp_1=ne[posa],t=ne[posc];
    ne[posa]=ne[posb];
    ne[posb]=ne[posc];
    ne[posc]=tmp_1;
  }
  int pnow=ne[0]; 
  for(int i=1;i<=10;i++)
  {
    printf("%d\n",pnow);
    pnow=ne[pnow];
  }
  system("pause");
  return 0;
}

这是100分代码,二者只有在指针更新的部分有区别,可是在这一部分当中,二者的写法是等价的嘛,想破头想不通,求大佬指点


by 2233颗GoldenEgg @ 2022-10-27 23:26:43

int tmp_1=ne[posa],t=ne[posc];
    ne[posa]=ne[posb];
    ne[posc]=tmp_1;
    ne[posb]=t;

二者只在这一部分有区别```cpp int tmp_1=ne[posa],t=ne[posc]; ne[posa]=ne[posb]; ne[posb]=ne[posc]; ne[posc]=tmp_1;


|