Cod sursa(job #434214)

Utilizator write2cristiGal Cristian write2cristi Data 5 aprilie 2010 13:14:03
Problema Gutui Scor 10
Compilator cpp Status done
Runda teme_upb Marime 2.6 kb
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#define maxxx 32000
typedef struct lol{
        int long greutate;
        int long inaltime;
        }lol;
unsigned 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;
}