问题标题: 酷町堂:7145:整理书本(book)

0
0
已解决
周炜骐
周炜骐
中级光能
中级光能

题目链接: 酷町堂:7145

#include<iostream>
using namespace std;
long long n,m,p,q,a[100005],s;
int Find(int p){
    for(int i=1;i<=n;i++)
        if(a[i]==p)
            return i;
}
void f1(int p){
    int idx=Find(p);
    for(int i=idx-1;i>=1;i--){
        a[i+1]=a[i];
    }
    a[1]=p;
}
void f2(int p){
    int idx=Find(p);
    for(int i=idx+1;i<=n;i++){
        a[i-1]=a[i];
    }
    a[n]=p;
}
void f3(int p,int q){
    int idx1=Find(p),idx2=Find(q);
    if(idx1==idx2){
        return;
    }
    if(idx1<idx2){
        for(int i=idx1;i<idx2;i++){
            a[i]=a[i+1];
        }
        a[idx2]=p;
    }else{
        for(int i=idx1-1;i>=idx2+1;i--){
            a[i+1]=a[i];
        }
        a[idx2+1]=p;
    }
}
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        a[i]=i;
    }
    while(m--){
        cin>>s;
        if(s==1){
            cin>>p;
            f1(p);
        }else if(s==2){
            cin>>p;
            f2(p);
        }else{
            cin>>p>>q;
            f3(p,q);
        }
    }
    for(int i=1;i<=n;i++){
        cout<<a[i]<<" ";
    }
    return 0;
}


1
已采纳
钱思源
钱思源
高级天翼
高级天翼

f3函数出错

应该为 循环idx+1到idx2(是<=不是<)

        a[i-1]=a[i]

注:我的修改方法源于我们班老师上课讲的TLE90分解法

0
我要回答