Cod sursa(job #270118)

Utilizator diannaDiaconu Diana dianna Data 3 martie 2009 19:21:02
Problema Lupul Urias si Rau Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.37 kb
#include<fstream.h>
ifstream f("lupu.in");
ofstream g("lupu.out");
long n,x,l,s;
struct elem
{       long ln,nr;
	elem *urm;
}*a,*ultim;

long numar(long y)
{
 long nr=0;
 for(long i=y;i<=x;i+=l)
	nr++;
 return nr-1;
}

void inserare(elem *q)
{
 elem *p;
 if(a==NULL)
 {
	a=q;
	a->urm=NULL;
        ultim=a;
 }
 else
 {
	if(a->nr==q->nr && a->ln < q->ln || a->nr>q->nr)
	{
		q->urm=a;
		a=q;
	}
	else
	{
		for(p=a;p->urm;p=p->urm)
		 {
			if(p->urm->nr==q->nr && p->urm->ln < q->ln || p->urm->nr>q->nr)
			{
				q->urm=p->urm;
				p->urm=q;
				break;
			}
		 }
		 if(p->urm==NULL)
		 {
			ultim->urm=q;
			ultim=q;
			ultim->urm=NULL;
		 }
	}
 }
}

void citire()
{
 long i,j,b,c;
 f>>n>>x>>l;
 for(i=1;i<=n;i++)
 {
	f>>b>>c;
	elem *p=new elem;
	p->ln=c;
	p->nr=numar(b);
	inserare(p);
 }
}

void afisare()
{
 elem *p;
 long s=0;
 for(p=a;p;p=p->urm)
	s+=p->ln;
 g<<s;
}

void program()
{
 int ok=1;
 while(ok)
 {
	long i,v=a->nr;
	elem *p=a;
	for(i=0;i<v && p->nr==v;i++)
		p=p->urm;
	elem *q=p;
        p=p->urm;
	for(;p->nr==v;p=p->urm)
	{
		elem *t=p;
		q->urm=p->urm;
		delete t;
	}
	while(a->nr==v)
	{
		p=a;
		p->nr++;
		if(p->nr > ultim->nr)
			ok=0;
		else
		{
			a=a->urm;
			inserare(p);
		}
	}
 }
}
int main()
{
 citire();
 program();
 afisare();
 g.close();
 return 0;
}