Pagini recente » Cod sursa (job #2854182) | Cod sursa (job #3192553) | Cod sursa (job #1350598) | Monitorul de evaluare | Cod sursa (job #436196)
Cod sursa(job #436196)
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
typedef struct gutui{
unsigned long greutate;
unsigned long inaltime;
}gutui;
gutui *v;
char ok=0;
unsigned long nr_gutui,inalt_max,pas_inalt;
void citire(){//citeste datele din fisier si le introduce in structura de tip gutui v
FILE *f=fopen("gutui.in","r");
fscanf(f,"%lu %lu %lu",&nr_gutui,&inalt_max,&pas_inalt);
v=(gutui*)malloc(sizeof(gutui)*nr_gutui);
for(unsigned i=0;i<nr_gutui;i++)
{
fscanf(f,"%lu %lu",&v[i].inaltime,&v[i].greutate);
if(v[i].inaltime>inalt_max)//daca are inaltimea mai mare decat
//cea maxima atunci nu se pune in structura
{
i--;
nr_gutui--;
continue;
}
if(v[i].inaltime%pas_inalt > inalt_max%pas_inalt)
v[i].inaltime=v[i].inaltime/pas_inalt+1;
else
v[i].inaltime=v[i].inaltime/pas_inalt;
}
v=(gutui*)realloc(v,sizeof(gutui)*nr_gutui);//daca este o gutuie la o inaltime mai mare decat
//cea maxima trebuie schimbata dimensiunea lui v
inalt_max/=pas_inalt;
fclose(f);
}
void afis(){
for(int i=0;i<nr_gutui;i++)
{
printf("%lu %lu\n",v[i].greutate,v[i].inaltime);
}
system("pause");
}
int compare (const void * a, const void * b)
{
return -( (*(gutui*)a).greutate - (*(gutui*)b).greutate );
}
void sortare(){//sorteaza in functie de greutate
qsort (v, nr_gutui, sizeof(gutui), compare);
}
int funct(char *vec,unsigned long i, unsigned long ind)//functie care primeste o gutuie si daca poate fi luata
// de Gigel returneaza valoarea greutatii si 0 daca nu
{
for(;i<inalt_max+1;i++)
if(vec[i]==0)
{
vec[i]=1;
return v[ind].greutate;
}
return 0;
}
int rezolvare(){//parcurge o singura data datele citite si returneaza suma greutatilor gutuilor citite
char *vec=(char*)calloc(inalt_max+1,1);
if(nr_gutui==0)
return 0;
unsigned long s=0;
for(unsigned long i=0;i<nr_gutui;i++)
s+=funct(vec, v[i].inaltime,i);
return s;
}
void scriere(unsigned long s){
FILE *g=fopen("gutui.out","w");
fprintf(g,"%lu",s);
fclose(g);
}
int main(){
citire();
sortare();
scriere(rezolvare());
return 0;
}