Pagini recente » Cod sursa (job #3284140) | Cod sursa (job #3214362) | Cod sursa (job #1863477) | Cod sursa (job #1113224) | Cod sursa (job #581993)
Cod sursa(job #581993)
#include<stdio.h>
#define INF 200000000
typedef struct
{
int g;
int c;
} ruc;
ruc A[10001];
int N;
int W;
long long CMIN = INF;
long int Eg[10001];
long int Cg[10001];
void citire(void)
{
FILE *f = fopen("energii.in","r");
fscanf(f,"%d %d",&N,&W);
for(int i=1;i<=N;i++)
fscanf(f,"%d %d",&A[i].g,&A[i].c);
fclose(f);
}
int poz(int li,int ls)
{
ruc a = A[(li+ls)/2];
A[(li+ls)/2] = A[li];
A[li] = a;
int c;
int i1 = 0;
int j1 = -1;
while(li<ls)
{
if((double)A[li].g/A[li].c<(double)A[ls].g/A[ls].c ||
((double)A[li].g/A[li].c==(double)A[ls].g/A[ls].c && A[li].c>A[ls].c))
{
a = A[li];
A[li] = A[ls];
A[ls] = a;
c = -i1;
i1 = -j1;
j1 = c;
}
li += i1;
ls += j1;
}
return li;
}
void quicksort(int li,int ls)
{
if(li<ls)
{
int k = poz(li,ls);
quicksort(li,k-1);
quicksort(k+1,ls);
}
}
void solve(void)
{
long long G = 0;
for(int i=1;i<=N;i++)
if(A[i].g >= W && A[i].c < CMIN)
{
CMIN = A[i].c;
Cg[i] = A[i].c;
}
else
{
if(G<=W)
{
if(CMIN == INF)
CMIN = 0;
G += A[i].g;
CMIN += A[i].c;
}
}
}
int main()
{
FILE *g = fopen("energii.out","w");
citire();
quicksort(1,N);
/* for(int i=1;i<=N;i++)
printf("%d %d\n",A[i].g,A[i].c);*/
solve();
if(CMIN != INF)
fprintf(g,"%lld",CMIN);
else
fprintf(g,"-1");
fclose(g);
return 0;
}