Pagini recente » Cod sursa (job #2386944) | Cod sursa (job #982675) | Cod sursa (job #328262) | Cod sursa (job #2069630) | Cod sursa (job #1471483)
#include <stdio.h>
#include <stdlib.h>
struct lista {
int c,e;
struct lista *u;
};
struct lista *prim=NULL;
int adauga(energie,cost) {
struct lista *z=(struct lista*)malloc(sizeof(struct lista));
if (z==NULL) return(0);
else {
z->e=energie; z->c=cost;
z->u=prim; prim=z;
return(1);
}
}
int sterge(struct lista *z) {
if (z==prim) {
prim=prim->u; free(z);
return(1);
}
else {
struct lista *t;
for (t=prim; t->u!=z && t!=NULL; t=t->u);
if (t==NULL) return(0);
else {
t->u=z->u; free(z);
return(1);
}
}
}
int main() {
int i,g,w,sum_e=0,sum_c=0;
FILE *f=fopen("energii.in","r");
if (f==NULL) {
printf("Eroare deschidere fisier.");
fflush(stdin); getchar();
}
else {
fscanf(f,"%d",&g); fscanf(f,"%d",&w);
for (i=0; i<g; i++) {
int tmp_e,tmp_c;
fscanf(f,"%d %d",&tmp_e,&tmp_c);
if (tmp_e>0) {
adauga(tmp_e,tmp_c);
sum_e+=tmp_e; sum_c+=tmp_c;
}
}
fclose(f);
f=fopen("energii.out","w");
if (sum_e<w) fprintf(f,"-1");
else {
int ok;
struct lista *t,*z,*optim;
do {
ok=0;
for (t=prim; t!=NULL && t->e>=w; t=t->u);
if (t!=NULL) {
optim=NULL;
for (z=t->u; z!=NULL; z=z->u)
if (z->e<w && (optim==NULL || z->c<optim->c))
optim=z;
if (optim!=NULL) {
optim->e+=t->e;
optim->c+=t->c;
sterge(t); ok=1;
}
}
} while(ok);
z=NULL;
for (t=prim; t!=NULL; t=t->u)
if (t->e>=w && (z==NULL || t->c<z->c))
z=t;
fprintf(f,"%d",z->c);
}
fclose(f);
}
return(0);
}