Cod sursa(job #262444)

Utilizator cosmin79Carabet Cosmin Andrei cosmin79 Data 19 februarie 2009 12:31:14
Problema Energii Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <stdio.h>
#include <stdlib.h>
struct generator
{
	int energie,cost;
};
generator v[1005];
int g,w,economie_distrusa;
void read()
{
	int i;
	scanf("%d%d",&g,&w);
	for (i=1; i<=g; i++)
		scanf("%d%d",&v[i].energie,&v[i].cost);
}
int compare(const void *p,const void *q)
{
	generator x=*(generator*)p,y=*(generator*)q;
	if (x.cost<y.cost)
		return -1;
	if (x.cost>y.cost)
		return 1;
	if (x.energie<y.energie)
		return -1;
	if (x.energie>y.energie)
		return 1;
	return 0;
}
void sort()
{
	qsort(v+1,g,sizeof(v[0]),compare);
}
void verif()
{
	int i,s=0;
	for (i=1; i<=g; i++)
		s+=v[i].energie;
	if (s<w)
	{
		printf("-1");
		economie_distrusa=1;
	}
}
void solve()
{
	int costmin,costact,r,i;
	costmin=1000000;
	for (i=g; i>=1; i--)
		if (v[i].energie<=w)
		{
			r=1;
			costact=v[i].cost;
			//printf("%d ",costact);
			while (costact<w)
			{
				costact+=v[r].energie;
				r++;
				if (r==i)
					break;
			}
			if (costact<costmin && costact>=w)
				costmin=costact;
		}
	printf("%d",costmin);
}
int main()
{
	freopen("energii.in","r",stdin);
	freopen("energii.out","w",stdout);
	read();
	sort();
	verif();
	//afisare();
	if (economie_distrusa==0)
		solve();
	return 0;
}