玄关求助!

P1188 PASTE

Tiskan_H @ 2024-07-22 18:59:07

样例对了,可是全WA,大佬求调QWQ

#include <bits/stdc++.h>
using namespace std;

int n,k,num;
int t[100010],f[100010],h[100010];

int main(){
    cin>>n>>k;
    for(int i=0;i<n;i++) t[i]=i+1,f[i]=i-1,h[i]=i;
    for(int i=1;i<=k;i++){
        int frm1,frm2,to;
        int f1=0,f2=0,t1=0,dis=0;
        cin>>frm1>>frm2>>to;
        for(int i=1;i<=n;i++){
            dis++;
            if(h[i]==frm1&&f1==0) frm1=i,f1=1;
            if(h[i]==frm2&&f2==0) frm2=i,f2=1;
            if(h[i]==to&&t1==0)
                if(frm1<=to) dis=0,t1=2;
                else to=i,t1=1;
            if(t1==2&&dis==frm2-frm1+1) to=i,t1=1;
        }
        t[f[frm1]]=t[frm2],f[t[frm2]]=f[frm1];
        f[t[to]]=frm2,t[frm2]=t[to];
        f[frm1]=to,t[to]=frm1;
        num=0;
        for(int i=t[0];i;i=t[i]) h[i]=++num;
        //for(int i=t[0];i;i=t[i]) cout<<i<<" ";
        //cout<<endl;
    }
    num=0;
    for(int i=t[0];++num!=11;i=t[i]) cout<<i<<"\n";
    return 0;
}

by Bao0714 @ 2024-07-22 21:53:35

#include<bits/stdc++.h>
using namespace std;
int main(){
    int N,K;
    cin>>N>>K;
    int wen[N+1];
    for(int i=1;i<=N;i++)wen[i]=i;
    while(K--){
        int a,b,c;
        cin>>a>>b>>c;
        int fu[b-a+1];
        for(int i=a;i<=b;i++)fu[i-a]=wen[i];//将需要复制的部分存到fu[]数组
        int xiu[N-b+a],hou[N+1];
        for(int i=1;i<a;i++)xiu[i]=wen[i];
        for(int i=a;i<=N-b+a-1;i++)xiu[i]=wen[i-a+b+1];//将复制的部分去掉后的原数组存入xiu[]
        for(int i=1;i<=c;i++)hou[i]=xiu[i];
        for(int i=c+1;i<=c+1+b-a;i++)hou[i]=fu[i-c-1];
        for(int i=c+2+b-a;i<=N;i++)hou[i]=xiu[i-b+a-1];//将复制的部分存放到制定的地方
        for(int i=1;i<=N;i++)wen[i]=hou[i];//将处理完的数组再赋给原数组以便于循环
    }
    for(int i=1;i<=10;i++)cout<<wen[i]<<endl;
    return 0;
}

|