Pagini recente » Cod sursa (job #433256) | Cod sursa (job #894565) | Cod sursa (job #1869926) | Cod sursa (job #700674) | Cod sursa (job #434276)
Cod sursa(job #434276)
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#define maxxx 32000
typedef struct lol{
int long greutate;
int long inaltime;
}lol;
int long nr_gutui,inalt_max,pas_inalt;
int key(int long inaltime){
float x=inaltime;
return ((int)(x/pas_inalt)==x/pas_inalt)?((int)x/pas_inalt-1):(int)x/pas_inalt;
}
int long poz_min(int long *v, int long i, int long max){
int long min=max, poz_min=0;
if(v[i] == 0)
return 0;
for(int long j=i;j<=inalt_max;j++)
if(min > v[j])
{
if(v[j] == 0)
return j-i;
min=v[j];
poz_min=j-i;
}
if(max == min)
return -1;
return poz_min;
}
unsigned long cit_rez(){
FILE *f=fopen("gutui.in","r");
fscanf(f,"%lu %lu %lu",&nr_gutui,&inalt_max,&pas_inalt);
inalt_max=key(inalt_max);
int long *vec=(int long*)calloc(inalt_max+1,sizeof(int long));
int poz;
//printf("%d\n\n\n",inalt_max);
//printf("%d %d %d\n",nr_gutui,inalt_max,pas_inalt);
lol x;
//system("pause");
for(unsigned i=0;i<nr_gutui;i++)
{
fscanf(f,"%lu %lu",&x.inaltime,&x.greutate);
x.inaltime=key(x.inaltime);
//printf("%d %d\n",x.inaltime,x.greutate);
if(x.inaltime>inalt_max)
{
i--;
nr_gutui--;
continue;
}
else{
poz=poz_min(vec, x.inaltime, x.greutate);
//printf("xx%ld %dxx\n",x.greutate,poz);
if(poz != -1)
{
vec[x.inaltime+poz]=x.greutate;
//printf("%lu %d\n",x.greutate,poz);
}
}
}
//system("pause");
unsigned long s=0;
for(int i=0;i<=inalt_max;i++)
s+=vec[i];
fclose(f);
//system("pause");
return s;
}
int main(){
FILE *g=fopen("gutui.out","w");
//citire();
//afis();
//sortare();
//afis();
//printf("%lu\n\n",inalt_max);
unsigned long s=cit_rez();
fprintf(g,"%lu",s);
//system("pause");
//printf("\n");
//afis();
fclose(g);
return 0;
}