Pagini recente » Cod sursa (job #1215017) | Cod sursa (job #436966)
Cod sursa(job #436966)
#include <stdio.h>
#include <stdlib.h>
typedef struct{
int inaltime;
int greutate;
}gutui;
/*int compare (const void *a, const void *b){
const gutui *item1=a,*item2=b;
if (item1->inaltime <item2->inaltime)
return 1;
else if (item1->inaltime > item2->inaltime)
return -1;
else
return 0;
}*/
int compare (const void *a, const void *b){
gutui *item1 = (gutui*)a;
gutui *item2 = (gutui*)b;
//printf("ggggg %d\n",item1->inaltime);
return -(item1->greutate - item2->greutate);
}
int main(){
FILE *fin=fopen("gutui.in","r");
FILE *fout=fopen("gutui.out","w");
int n,h,u;
int i,temp,j,srs;
int total=0;
fscanf(fin,"%d %d %d",&n,&h,&u);
gutui *v=(gutui*)malloc(n*sizeof(gutui));
int *x=(int*)malloc(n*sizeof(int));
int *serie=(int*)malloc((h+3)*sizeof(int));
int *nivel=(int*)malloc(n*sizeof(int));
srs=1;
temp=0;
for (i=h;i>0;i--){
serie[i]=srs;
temp++;
if (temp==u){
temp=0;
srs++;
}
}
for (i=0;i<n;i++)
fscanf(fin,"%d %d",&v[i].inaltime,&v[i].greutate);
/*for (i=0;i<n;i++)
printf("%d %d\n",serie[v[i].inaltime],v[i].greutate);
printf("\n");*/
qsort(v,n,sizeof(gutui),compare);
for (i=0;i<n;i++)
nivel[i]=serie[v[i].inaltime];
/*for (i=0;i<n;i++)
printf("%d\t%d\n",v[i].inaltime,v[i].greutate);*/
for (i=0;i<n;i++){
if (v[i].inaltime <= h)
if (nivel[i]>0){
//printf("%d \n",v[i].greutate);
total+=v[i].greutate;
for (j=i+1;j<n;j++)
if (nivel[j] >= nivel[i])
nivel[j]--;
}
}
fprintf(fout,"%d",total);
fclose(fin);
fclose(fout);
free(v);
free(x);
free(serie);
return 0;
}