Pagini recente » Cod sursa (job #2621479) | Cod sursa (job #2489667) | Cod sursa (job #1721074) | Cod sursa (job #1850150) | Cod sursa (job #10381)
Cod sursa(job #10381)
#include<fstream.h>
struct ms
{
int v;
int p;
}c[1002];
int a[1002],b[1002];
int main()
{
long int s,s1,s2,min=-1,tmp;
int t,g,w,ok=1,i;
ifstream fin("energii.in");
ofstream fout("energii.out");
fin>>g>>w;
s=0;
for(i=1;i<=g;i++)
{ fin>>a[i]>>b[i]; s+=a[i];}
fin.close();
if(s<w) {fout<<-1;}
else
{
/*while(ok)
{ s1=s2=0;
c[g]++;
ok=0;
for(i=g;i>=1;i--)
{
t=c[i];
if(c[i]>1)
{ c[i]=t%2;
c[i-1]+=t/2;}
if(!c[i]) ok=1;
else {s1+=a[i]; s2+=b[i];}
}
if(s1>=w)
if(min<0) min=s2;
else if(min>=s2) min=s2;
}*/
int max=0,poz;
for(i=1;i<=g;i++)
{ c[i].v=a[i]-b[i]; c[i].p=i;}
t=g; poz=0;
while(t>0)
{
for(i=1;i<=t;i++)
if(max<=c[i].v) {max=c[i].v; poz=i;}
if(poz){tmp=c[t].v;
c[t].v=c[poz].v;
c[poz].v=tmp;
tmp=c[t].p;
c[t].p=c[poz].p;
c[poz].p=tmp;}
poz=0; max=-20000;
t--;
} max=min=0;
for(i=g;i>=1;i--)
{
if(c[i].v==c[i-1].v)
{
if(a[c[i].p]>a[c[i-1].p])
{max=a[c[i].p]; poz=i;}
else
{max=a[c[i-1].p]; poz=i-1;}
}else{
w-=max;
if(w<=0)
{ if((max) && (w+max>0))
min+=b[c[poz].p];
break;
}
if(max)
min+=b[c[poz].p];
max=0; w-=a[c[i].p];
if(w<=0)
{ if(w+a[c[i].p]>0)
min+=b[c[i].p];
break;
}
min+=b[c[i].p];
}
}
fout<<min;
}
fout.close();
return 0;
}