Cod sursa(job #705395)

Utilizator SebiSebiPirtoaca George Sebastian SebiSebi Data 4 martie 2012 10:57:43
Problema Energii Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include<iostream>
#include<fstream>
#include<algorithm>
#include<bitset>
using namespace std;
struct raport {
	float val;
	int poz;
};
int e[1002],c[1002];
raport v[1001];
bitset <1001> d;
inline bool cmp(const raport a, const raport b)
{
	return a.val>b.val;
}
int main ()
{
	int n,i,s,cmin,emin,dif,min,minc;
	ifstream f("energii.in");
	ofstream g("energii.out");
	f>>n>>emin;
	for(i=1;i<=n;i++)
		f>>e[i]>>c[i];
	f.close();
	for(i=1;i<=n;i++) {
		if(c[i]==0)
			v[i].val=e[i];
		else v[i].val=float(e[i])/float(c[i]);
		v[i].poz=i;
	}
	sort(v+1,v+n+1,cmp);
	s=0;
	cmin=0;
	for(i=1;i<=n;i++) {
		cmin=cmin+c[v[i].poz];
		s=s+e[v[i].poz];
		d[v[i].poz]=1;
		if(s>=emin)
			break;
	}
	if(i==(n+1))
		g<<"-1";
	else {
		min=cmin;
		cmin=cmin-c[v[i].poz];
		s=s-e[v[i].poz];
		d[v[i].poz]=0;
		dif=emin-s;
		minc=10001;
		for(i=1;i<=n;i++)
			if((e[i]>=dif)&&(c[i]<minc)&&(d[i]==0))
				minc=c[i];
		cmin=cmin+minc;
		if(min<cmin)
			cmin=min;
		g<<cmin;
	}
	g.close();
	return 0;
}