No.smilitude wrote:if(a1.host==b1.host) return ;
Is this statement wrong ??
What's your problem now? Invalid memory reference or something else?
Moderator: Board moderators
UVa OJ wrote: Dear Fahim:
Your program has died with signal 11 (SIGSEGV). Meaning:
Invalid memory reference
Before crash, it ran during 0.002 seconds.
--
PS: Check the board at http://acm.uva.es/board/
The Online Judge (Linux acm.uva.es 2.4.18-27.7.x i686)
Judge software version 2.8 [http://acm.uva.es/problemset/]
Fri Apr 21 07:17:44 UTC 2006
Code: Select all
removed
Code: Select all
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<assert.h>
#define N 25
typedef struct NODE{
struct NODE *Next;
struct NODE *Prev;
short id;
}NODE;
InsertAfter(NODE *ExistingItem,NODE *NewItem)
{
NewItem->Prev=ExistingItem;
NewItem->Next=ExistingItem->Next;
ExistingItem->Next=NewItem;
if(NewItem->Next!=NULL)
NewItem->Next->Prev=NewItem;
}
AddAfter(NODE **Item,short id)
{
NODE *p=malloc(sizeof *p);
p->Next=p->Prev=NULL;
p->id=id;
if(*Item==NULL)
*Item=p;
else
InsertAfter(*Item,p);
}
typedef struct{
NODE *HeadPtr;
NODE *TailPtr;
short NumItems;
}DEQUE;
Push(DEQUE *D,short id)
{
AddAfter(&D->TailPtr,id);
if(!D->NumItems)
D->HeadPtr=D->TailPtr;
else
D->TailPtr=D->TailPtr->Next;
++D->NumItems;
}
Pop(DEQUE *D,short *id)
{
NODE *tmp=D->TailPtr->Prev;
*id=D->TailPtr->id;
free(D->TailPtr);
if(tmp!=NULL)
tmp->Next=NULL;
D->TailPtr=tmp;
--D->NumItems;
if(!D->NumItems)
D->HeadPtr=NULL;
}
DEQUE *D[N];
int n;
short adr[N],padr[N];
int main()
{
char A[10],B[10];
short i,j,k,l,t;
NODE *p;
#ifndef ONLINE_JUDGE
freopen("A.in","r",stdin);
#endif
scanf("%d\n",&n);
for(t=0;t<n;t++)
{
D[t]=malloc(sizeof *D[t]);
D[t]->HeadPtr=D[t]->TailPtr=NULL;
D[t]->NumItems=0;
adr[t]=padr[t]=t;
Push(D[t],t);
}
scanf("%s",&A);
while(strcmp(A,"quit")!=0)
{
scanf("%d %s %d\n",&i,&B,&j);
t=adr[i],k=adr[j];
if(t==k || i==j)
{
scanf("%s",&A);
continue;
}
if(strcmp(A,"move")==0)
{
if(strcmp(B,"onto")==0)
{
while(D[t]->TailPtr->id!=i)
{
Pop(D[t],&l);
adr[l]=l;
padr[l]=t;
Push(D[l],l);
}
while(D[k]->TailPtr->id!=j)
{
Pop(D[k],&l);
adr[l]=l;
padr[l]=k;
Push(D[l],l);
}
Pop(D[t],&l);
Push(D[k],l);
assert(l==i);
adr[i]=k;
padr[i]=t;
}
else
{
while(D[t]->TailPtr->id!=i)
{
Pop(D[t],&l);
adr[l]=l;
padr[l]=t;
Push(D[l],l);
}
Pop(D[t],&l);
Push(D[k],l);
assert(l==i);
adr[i]=k;
padr[i]=t;
}
}
else
{
if(strcmp(B,"onto")==0)
{
p=D[k]->HeadPtr;
while(p->id!=j)
p=p->Next;
p=p->Next;
while(p!=NULL)
{
Push(D[padr[p->id]],p->id);
adr[p->id]=padr[p->id];
padr[p->id]=k;
p=p->Next;
}
while(D[k]->TailPtr->id!=j)
Pop(D[k],&l);
p=D[t]->HeadPtr;
while(p->id!=i)
p=p->Next;
while(p!=NULL)
{
Push(D[k],p->id);
padr[p->id]=t;
adr[p->id]=k;
p=p->Next;
}
Pop(D[t],&l);
while(l!=i)
Pop(D[t],&l);
}
else
{
p=D[t]->HeadPtr;
while(p->id!=i)
p=p->Next;
while(p!=NULL)
{
Push(D[k],p->id);
adr[p->id]=k;
padr[p->id]=t;
p=p->Next;
}
Pop(D[t],&l);
while(l!=i)
Pop(D[t],&l);
}
}
scanf("%s",&A);
}
for(t=0;t<n;t++)
{
printf("%d:",t);
p=D[t]->HeadPtr;
while(p!=NULL)
{
printf(" %d",p->id);
p=p->Next;
}
printf("\n");
}
return 0;
}
Code: Select all
Code: Select all
Deleted the code...