【求助】萌新0分,runtime error
查看原帖
【求助】萌新0分,runtime error
73194
ab021510105楼主2021/10/29 15:40

刚学了指针所以比赛时候就用了,结果re了。请问是哪段没控好?

#include<cstdio>
#include<string>
#include<cstring>
#include<cmath>
#include<iostream>
#include<vector>
#include<algorithm>
#include<deque>
using namespace std;
typedef struct node
{
    int8_t d;
    int index;
    node *next;
    node *prv;
    node()
    {
        d=-1;
    }
}linklist;
struct block
{
    linklist* lt;
    int8_t type;
    int il,ir;
    block(linklist* l,int8_t t):lt(l),type(t){}
};
linklist ls;
void insertlink(int8_t d,linklist * &p,int index)
{
    p->next=new linklist;
    p->next->d=d;
    p->next->index=index;
    p->next->next=NULL;
    p->next->prv=p;
    p=p->next;
}

void remove(linklist *p)
{
    linklist *t=p;
    p->prv->next=p->next;
    if(p->next!=NULL)
        p->next->prv=p->prv;
    delete t;
}

deque<block> *dq1,*dq2=NULL;
int main()
{
    int n;
    cin>>n;
    int t=0;
    linklist *p=&ls;
    linklist* lt=NULL;
    int i,it=-1;
    dq1=new deque<block>;
    for(i=0;i<n;i++)
    {
        scanf("%d",&t);
        insertlink(t,p,i);
        if(p->prv->d!=t)
        {
            if(lt!=NULL)
            {
                block b(lt,p->prv->d);
                b.il=it;
                b.ir=i-1;
                dq1->push_back(b);
            }
            lt=p;
            it=i;
        }
    }
    block b(lt,t);
    b.il=it;
    b.ir=p->index;
    dq1->push_back(b);
    while(dq1!=NULL)
    {
        while(!dq1->empty())
        {
            b=dq1->front();
            dq1->pop_front();
            printf("%d ",b.lt->index+1);
            p=b.lt;
            remove(p);
            b.lt=b.lt->next;
            b.il++;
            if(b.il>b.ir)
                continue;
            if(dq2==NULL)
            {
                dq2=new deque<block>;
                dq2->push_back(b);
            }
            else if(dq2->back().type!=b.type)
            {
                dq2->push_back(b);
            }
            else
            {
                dq2->back().ir+=b.ir-b.il+1;
            }
        }
        printf("\n");
        delete dq1;
        dq1=dq2;
        dq2=NULL;
    }
    return 0;
}
2021/10/29 15:40
加载中...