Pagini recente » Cod sursa (job #1590251) | Cod sursa (job #2489877) | Cod sursa (job #2370593) | Cod sursa (job #988535) | Cod sursa (job #1477141)
#include<stdio.h>
#include<malloc.h>
int g,w;
struct ob
{
int c,e;
};
ob a[1001];
#define inf 1000000
void merge(ob *v,int l,int m,int r)
{
ob *vp=(ob*)malloc((r-l+1)*sizeof(ob));//vetor intermediar
int i=l,j=m+1,k=0,s=0;
while(i<=m && j<=r)
{
if(v[i].c<=v[j].c)
{
vp[k].c=v[i].c;
vp[k].e=v[i].e;
i++;
}
else
{
vp[k].c=v[j].c;
vp[k].e=v[j].e;
j++;
}
k++;
}
if(i>m)
for(s=j;s<=r;s++)
{
vp[k].c=v[s].c;
vp[k].e=v[s].e;
k++;
}
else
for(s=i;s<=m;s++)
{
vp[k].c=v[s].c;
vp[k].e=v[s].e;
k++;
}
for(s=0;s<=r-l;s++)
{
v[l+s].c=vp[s].c;
v[l+s].e=vp[s].e;
}
free(vp);
}
void mergesort(ob *v,int l,int r)
{
if(l==r) return;
int m=(l+r)/2;
mergesort(v,l,m);
mergesort(v,m+1,r);
merge(v,l,m,r);
}
int main()
{
FILE* f1,*f2;
f1=fopen("energii.in","r");
f2=fopen("energii.out","w");
fscanf(f1,"%d %d",&g,&w);
for(int i=0;i<g;i++)
fscanf(f1,"%d %d",&a[i].e,&a[i].c);
int sum=0,C=inf,ok=0;
mergesort(a,0,g-1);
for(int i=0;i<g;i++)
{
if(a[i].e>=w && a[i].c<C)
{
fprintf(f2,"%d",a[i].c);
ok=1;
break;
}
if(!i)
C=0;
sum+=a[i].e;
C+=a[i].c;
if(sum>=w)
{
fprintf(f2,"%d",C);
ok=1;
break;
}
}
if(!ok)
fprintf(f2,"-1");
return 0;
}