Cod sursa(job #159196)

Utilizator Alexa_ioana_14Antoche Ioana Alexandra Alexa_ioana_14 Data 13 martie 2008 23:43:06
Problema Energii Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include<stdio.h>
#include<stdlib.h>
long int g,w,i,s,cost,ok;
struct interval {int a,b;};
int compar(const void*p, const void*q)
{
   interval *pp=(interval*)p, *qq=(interval*)q;
   interval x=*pp,y=*qq;
   if (x.b>y.b) return 1;
   else
	if (x.b==y.b && x.a<y.a) return 1;
   if (x.a<y.a) return -1;
   return 0;
}
int main()
{
	interval v[5001];
	freopen("energii.in","r",stdin);
	freopen("energii.out","w",stdout);
	scanf("%ld%ld",&g,&w);
	for (i=0; i<g; i++) scanf("%ld%ld",&v[i].a,&v[i].b);
	qsort(v,g,sizeof(v[0]),compar);
	s=0; cost=0; ok=0;
	for (i=0; i<g; i++)
	{
	  if ((s>=w)&&(cost<=v[i].b))
	     {
	       ok=1;
	       printf("%ld",cost);
	     }
	  else
	     if (v[i].a>=w)
		{
		  ok=1;
		  printf("%ld",v[i].b);
		}
	  if (ok==1) break;
	  else
	     {s=s+v[i].a;
	     cost=cost+v[i].b;}
	}
	if (ok==0) 
		printf("-1");
}