Cod sursa(job #18167)

Utilizator ionel71089lescai ionel ionel71089 Data 18 februarie 2007 10:18:05
Problema Reguli Scor 50
Compilator cpp Status done
Runda preONI 2007, Runda 2, Clasele 11-12 Marime 1.12 kb
#include<fstream.h>
ifstream f("reguli.in");
ofstream g("reguli.out");
typedef struct _lista
	{
	long x;
	_lista *urm;
	}*Lista;
typedef struct _tiplista
	{
	Lista st,dr;
	}TL;
TL lTot={0},lSec={0};
void adauga(TL &q,long x,int tip)
	{
	Lista nou=NULL;
	if(tip==0)
		{
		nou=new _lista;nou->urm=NULL;nou->x=x;
		q.dr->urm=nou;
		q.dr=nou;
		}
	else
		{
		nou=new _lista;nou->urm=q.st;nou->x=x;
		q.dr->urm=nou;
		q.dr=nou;
		}
	}
int n=0,k=0;
int main()
{
int i=0;
long x0=0,x1=0,delta;
f>>n;
f>>x0;
f>>x1;
delta=x1-x0;
x0=x1;
Lista nou=NULL;
nou=new _lista;
nou->urm=NULL;nou->x=delta;
lTot.st=lTot.dr=nou;
nou=new _lista;nou->urm=nou;nou->x=delta;
lSec.st=lSec.dr=nou;
k=1;
Lista klea=lTot.st;
Lista curS=lSec.st,cur=NULL;
for(i=2;i<=n-1;i++)
	{
	f>>x1;
	delta=x1-x0;
	adauga(lTot,delta,0);
	if(delta==curS->x)
		curS=curS->urm;
	else
		{
		for(cur=klea->urm;cur;cur=cur->urm)
			adauga(lSec,cur->x,1),k++;
		klea=lTot.dr;
		curS=lSec.st;
		}
	x0=x1;
	}
f.close();
g<<k<<"\n";
for(cur=lSec.st;cur!=lSec.dr;cur=cur->urm)
		g<<cur->x<<"\n";
g<<cur->x<<"\n";
g.close();
return 0;
}