Cod sursa(job #18234)

Utilizator butyGeorge Butnaru buty Data 18 februarie 2007 10:55:44
Problema Ghiozdan Scor 0
Compilator cpp Status done
Runda preONI 2007, Runda 2, Clasele 11-12 Marime 1.06 kb
#imclude<stdio.h>
char V[Gmax],M[Gmax],A[Nmax];
int N,G;
struct lista
{
	int inf;
	lista *urm;
};
void cit()
{
	int i;
	freopen("ghiozdan.in","r",stdin);
	scanf("%d%d",&N,&G);
	for(i=1;i<=N;i++)
		scanf("%d",&A[i]);
}
void rez()
{
	int i;
	lista *C,*D,*E,*c,*d,*e;
	V[0]=1;
	M[0]=1;
	C=new lista;
	C->urm=new lista;
	C->urm->inf=0;
	C->urm->urm=NULL;
	for(i=1;i<=N;i++)
	{
		D=new lista;
		d=D;
		for(c=C->urm;c;c=c->urm)
			if( c->inf+A[i]<=G && V[c->inf+A[i]]==0 && ( V[c->inf+A[i]] && M[c->inf+A[i]]>M[c->inf]+1)
			{
				V[c->inf+A[i]]=1;
				M[c->inf+A[i]]=M[c->inf]+1;
				d->urm=new lista;
				d=d->urm;
				d->inf=c->inf+A[i];
				d->urm=NULL
			}
		c=C;
		d=D;
		E=new lista;
		e=E;
		while( c && d )
		{
			if(c->inf<d->inf)
			{
				e->urm=new lista;
				e=e->urm;
				e->inf=c->inf;
				e->urm=NULL;
				c=c->urm;
			}
			else if(c->inf>=d->inf)
			{
				e->urm=new lista;
				e=e->urm;
				e->inf=d->inf;
				e->urm=NULL;
				d=d->urm;
			}
		}
	}
}
int main()
{
	cit();
	rez();
	scr();
	return 0;
}