Cod sursa(job #74688)

Utilizator anna_bozianuBozianu Ana anna_bozianu Data 27 iulie 2007 10:59:39
Problema Schi Scor 55
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.39 kb
#include<stdio.h>
struct nod{
long int info;
long int key;
nod *prev;
nod *next;
};
long int n,i,kkey,caut;
nod *prim,*ultim,*sd,*su,*sp;
void prel(nod *dd,nod *uu);
void init();
void ins();
void del();
int main()
{
	FILE *f,*g;
	f=fopen("schi.in","r");
	g=fopen("schi.out","w");
	fscanf(f,"%lu",&n);
	if(n==1)for(;;);
	prim=new nod;
	ultim=new nod;
	fscanf(f,"%ld",&kkey);
	prim->info=1;
	prim->key=kkey;
	prim->prev=0;
	prim->next=0;
	ultim=prim;
	for(i=2;i<=n;i++)
	{ fscanf(f,"%ld",&kkey);
	  init();
	}
	sd=prim;caut=1;
	while(caut<=n)
	{
		su=ultim;
		while(su->key!=caut)
		su=su->prev;
		sp=su;
		if(su!=sd)
		{ sp=su;
		  for(;;)
		  { sp=sp->prev;
		    sp->key++;
		    if(sp==sd) break;
		  }
		  ins();
		  del();
		}
		else sd=sd->next;
		caut++;
	}
	sd=prim;
	while(sd)
	{
		fprintf(g,"%ld\n",sd->info);
		sd=sd->next;
	}
	fprintf(g,"\n");
	fcloseall();
	return 0;
}
void init()
{
	nod *pp;
	pp=new nod;
	pp->info=i;
	pp->key=kkey;
	pp->prev=ultim;
	pp->next=0;
	ultim->next=pp;
	ultim=pp;
}
void ins()
{
	nod *pp;
	pp=new nod;
	pp->info=su->info;
	pp->key=su->key;
	pp->next=sd;
	if(sd->prev) { pp->prev=sd->prev;sd->prev->next=pp;}
	else { pp->prev=0;prim=pp;}
	sd->prev=pp;
}
void del()
{
	if(su==ultim) { ultim=ultim->prev;ultim->next=0;su=0;return;}
	su->prev->next=su->next;
	su->next->prev=su->prev;
	su=0;
}