Cod sursa(job #3298783)

Utilizator abel3324Ursu Abel-Patrick abel3324 Data 1 iunie 2025 17:21:14
Problema Problema rucsacului Scor 0
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.51 kb
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>

typedef struct
{
    int weight;
    int profit;
}bp;
int compare(const void *a, const void *b)
{
    const bp *x = (const bp*)a;
    const bp *y = (const bp*)b;
    if (x->profit < y->profit) return 1;
    if (x->profit > y->profit) return -1;
    return 0;
}

int greedy(bp *v,int size,int maxG)
{
   int s=0;
   qsort(v,size,sizeof(bp),compare);
   for(int i=0;i<size;i++)
   {
        if(maxG>=v[i].weight && maxG>0)
        {
            maxG-=v[i].weight;
            s+=v[i].profit;
        }
   }
   return s;
}

int main(void)
{
    bp v[100000]={0};
    FILE *fin=fopen("rucsac.in","r");
    FILE *fout=fopen("rucsac.out","w");
    if(fin==NULL || fout==NULL)
    {
        fprintf(stderr,"eroare la deschiderea fisierelor");
        exit(EXIT_FAILURE);
    }
    int N,G;
    if((fscanf(fin,"%d %d",&N,&G))!=2)
    {
        fprintf(stderr,"eroare la citirea din fisier");
        exit(EXIT_FAILURE);
    }
    for(int i=0;i<N;i++)
    {
        if((fscanf(fin,"%d %d",&v[i].weight,&v[i].profit))!=2)
        {
            fprintf(stderr,"eroare la citirea din fisier");
            exit(EXIT_FAILURE);
        }
    }
    int result=greedy(v,N,G);
    fprintf(fout,"%d\n",result);
    if((fclose(fin))!=0)
    {
        fprintf(stderr,"eroare la inchdierea fisierului de citire");
        exit(EXIT_FAILURE);
    }
    if((fclose(fout))!=0)
    {
        fprintf(stderr,"eroare la inchdierea fisierului de scriere");
        exit(EXIT_FAILURE);
    }
}