Mai intai trebuie sa te autentifici.
Cod sursa(job #18167)
Utilizator | 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;
}