Pagini recente » Cod sursa (job #867555) | Cod sursa (job #3183045) | Cod sursa (job #2298494) | Cod sursa (job #251733) | Cod sursa (job #436158)
Cod sursa(job #436158)
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
typedef struct lol{
unsigned long greutate;
unsigned long inaltime;
}lol;
lol *v;
char ok=0;
unsigned long nr_gutui,inalt_max,pas_inalt;
unsigned long key(unsigned long inaltime){
return inaltime/pas_inalt;
}
void citire(){
FILE *f=fopen("gutui.in","r");
fscanf(f,"%lu %lu %lu",&nr_gutui,&inalt_max,&pas_inalt);
v=(lol*)malloc(sizeof(lol)*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)
{
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=(lol*)realloc(v,sizeof(lol)*nr_gutui);
inalt_max/=pas_inalt;
fclose(f);
}
void afis(){
for(int i=0;i<nr_gutui;i++)
{
printf("%d %d\n",v[i].greutate,v[i].inaltime);
}
system("pause");
}
int compare (const void * a, const void * b)
{
return -( (*(lol*)a).greutate - (*(lol*)b).greutate );
}
void sortare(){
qsort (v, nr_gutui, sizeof(lol), compare);
}
int funct(char *vec,unsigned long i, unsigned long ind)
{
for(;i<inalt_max+1;i++)
if(vec[i]==0)
{
vec[i]=1;
return v[ind].greutate;
}
return 0;
}
int rezolvare2(){
char *vec=(char*)calloc(inalt_max+1,1);
if(nr_gutui==0)
return 0;
unsigned long s=0,j;
for(unsigned long i=0;i<nr_gutui;i++){
//j=s;
s+=funct(vec, v[i].inaltime,i);
//printf("x %d\n",s-j);
}
return s;
}
int main(){
FILE *g=fopen("gutui.out","w");
citire();
//afis();
sortare();
//afis();
//printf("%lu\n\n",inalt_max);
unsigned long s=rezolvare2();
fprintf(g,"%lu",s);
//system("pause");
//printf("\n");
//afis();
fclose(g);
return 0;
}