注意!!

链表的头跟尾的删除与添加要特判

链表为空要特判

pool的pt位置与后面要对应

#include<cstdio>
using namespace std;
int readint(){
    int ans=0,f=1;
    char c=getchar();
    while(!(c>='0'&&c<='9')){
        if(c=='-') f=-1;
        c=getchar();
    }
    while(c>='0'&&c<='9'){
        ans=ans*10+c-'0';
        c=getchar();
    }
    return f*ans;
}
const int maxn=23009;
struct node{
    int w;
    node*nt,*rd;
    node():w(0),nt(NULL),rd(NULL){}
    node(int W):w(W),nt(NULL),rd(NULL){}
}x[maxn],*head,*tail,*pt=x;
int n,m,k,num;
int W;
void add(){
    pt->w=W;
    pt->nt=pt->rd=NULL;
    if(head==NULL) tail=head=pt;
    else{
        tail->nt=pt;
        tail=pt;
    }
    pt++;
}
void init(){
    head=tail=NULL;
}
int main(){
    init();
    n=readint();m=readint();k=readint();num=readint();
    for(int i=0;i<n;i++){
        W=readint();
        add();
    }
    node*t=head,*pre=head;
    for(int i=0;i<n;i++){
        W=readint();
        if(W!=-1) x[i].rd=x+W;
    }
    for(int i=0;i<m;i++){
        W=readint();
        for(t=head,pre=head;;W--,pre=t,t=t->nt){
            if(!W){
                if(t==head) head=head->nt;
                else pre->nt=t->nt;
                for(int i=0;i<n;i++) if(x[i].rd==t) x[i].rd=NULL;
                break;
            }
        }     
    }
    for(int i=0;i<k;i++){
        W=readint();
        int pos=readint(),tar=readint();
        pt++;
        pt->w=W;
        if(pos==0){
            pt->nt=head;
            head=pt;
            if(tar==-1) pt->rd=NULL;
            else for(node*tmp=head;;tar--,tmp=tmp->nt){
                if(!tar){
                    pt->rd=tmp;
                    break;
                }
            }
        }else for(t=head,pre=head;;pos--,pre=t,t=t->nt){
            if(!pos){
                pre->nt=pt;
                pt->nt=t;
                if(tar==-1) pt->rd=NULL;
                else for(node*tmp=head;;tar--,tmp=tmp->nt){
                    if(!tar){
                        pt->rd=tmp;
                        break;
                    }
                }
                break;
            }
        }
    }
    node*T=head;
    for(;;num--,T=T->nt){
        if(!num) break;
    }
    for(t=T;t!=NULL;t=t->nt){
        printf("%d",t->w);
        printf(t->nt==NULL?" -1\n":" ");
    }
    for(t=T;t!=NULL;t=t->rd){
        printf("%d",t->w);
        printf(t->rd==NULL?" -1\n":" ");
    }    
    if(T==NULL) printf("-1\n-1\n");
    return 0;
}
View Code

 

posted @ 2018-10-11 00:48  ChenThree  阅读(156)  评论(0编辑  收藏  举报