Cod sursa(job #594978)

Utilizator maritimCristian Lambru maritim Data 10 iunie 2011 18:06:53
Problema Schi Scor 65
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include<stdio.h>
#include<malloc.h>

typedef struct _nod
{
	int info;
	struct _nod *s;
	struct _nod *d;
} nod;

int N;
int a;

void add(nod*& a,nod*& b,int c)
{
	nod *nou = (nod*)malloc(sizeof(nod));
	nou->info = c;
	nou->d = b;
	nou->s = a;
	a->d = nou;
	b->s = nou;
}

int main()
{
	FILE *f = fopen("schi.in","r");
	FILE *g = fopen("schi.out","w");
	
	fscanf(f,"%d ",&N);
	nod *cap = (nod*)malloc(sizeof(nod));
	cap->d = NULL;
	cap->s = NULL;
	fscanf(f,"%d ",&cap->info);
	nod *coada = (nod*)malloc(sizeof(nod));
	cap->d = coada;
	coada->d = NULL;
	coada->s = cap;
	fscanf(f,"%d ",&a);
	if(a == 2)
		coada->info = 2;
	else
		coada->info = 1,cap->info = 2;
	for(int i=3;i<=N;i++)
	{
		fscanf(f,"%d ",&a);
		if(a == 1)
		{
			cap->s = (nod*)malloc(sizeof(nod));
			cap->s->info = i;
			cap->s->s = NULL;
			cap->s->d = cap;
			cap = cap->s;
		}
		else if(a == i)
		{
			coada->d = (nod*)malloc(sizeof(nod));
			coada->d->info = i;
			coada->d->d = NULL;
			coada->d->s = coada;
			coada = coada->d;
		}
		else
		{
			nod *q = cap;
			for(int j=1;j<a-1;j++,q=q->d);
			add(q,q->d,i);
		}
	}
	for(;cap;cap=cap->d)
		fprintf(g,"%d\n",cap->info);
	
	fclose(g);
	fclose(f);
	return 0;
}