Pagini recente » Cod sursa (job #476074) | Cod sursa (job #3222044) | Cod sursa (job #1556919) | Cod sursa (job #889753) | Cod sursa (job #441726)
Cod sursa(job #441726)
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
typedef struct gutui{
unsigned greutate;
unsigned inaltime;
}gutui;
gutui *v;
char ok=0;
unsigned 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,"%u %u %u",&nr_gutui,&inalt_max,&pas_inalt);
v=(gutui*)malloc(sizeof(gutui)*nr_gutui);
for(unsigned i=0;i<nr_gutui;i++)
{
fscanf(f,"%u %u",&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(unsigned i=0;i<nr_gutui;i++)
{
printf("%u %u\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 i, unsigned 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 s=0;
for(unsigned i=0;i<nr_gutui;i++)
s+=funct(vec, v[i].inaltime,i);
return s;
}
void scriere(unsigned s){
FILE *g=fopen("gutui.out","w");
fprintf(g,"%u",s);
fclose(g);
}
int main(){
citire();
sortare();
scriere(rezolvare());
return 0;
}