Mai intai trebuie sa te autentifici.
Cod sursa(job #308860)
| Utilizator | Data | 28 aprilie 2009 19:29:04 | |
|---|---|---|---|
| Problema | Energii | Scor | 10 |
| Compilator | cpp | Status | done |
| Runda | Arhiva de probleme | Marime | 1.07 kb |
#include<fstream.h>
#include<values.h>
long i,a[1002],b[1002],aux,min,gata,inj,mins,sx,sy,s,m,ss,j,n;
int main()
{
ifstream f("energii.in");
ofstream g("energii.out");
f>>n>>m;
min=MAXLONG;
mins=MAXLONG;
for (i=1;i<=n;i++)
{
f>>a[i]>>b[i];
sx+=a[i];sy+=b[i];
}
if (sx<m) g<<-1<<'\n';
else if (sx==m) g<<sy<<'\n';
else {
inj=n;
while (inj>1){
inj/=2;
do{
gata=1;
for (i=1;i<=n-inj;i++)
if (a[i]>a[i+inj]){
aux=a[i];
a[i]=a[i+inj];
a[i+inj]=aux;
aux=b[i];
b[i]=b[i+inj];
b[i+inj]=aux;
gata=0;
}
}
while(!gata);
}
for (i=1;i<=n;i++)
{
s=0;ss=0;
for (j=i;j<=n;j++)
{
s+=a[j];ss+=b[j];
if (s==m && ss<=mins) { mins=ss;}
else if (s>m&&ss<=mins) {mins=ss;}
}
}
g<<mins<<'\n';
}
g.close();
return 0;
} 