Cod sursa(job #137544)

Utilizator anna_bozianuBozianu Ana anna_bozianu Data 17 februarie 2008 12:36:39
Problema Stalpi Scor 0
Compilator cpp Status done
Runda preONI 2008, Runda 4, Clasele 11-12 Marime 1.52 kb
#include<stdio.h>
long int n,x[100],c[100],st[100],dr[100],v[100],viz,i,Ct,j,sol;
 void heapdown(long int ii,long int nn);
 void swap(long int aa,long int bb);
 void cmin(long int i);
int main()
{   FILE *f=fopen("stalpi.in","r"),
         *g=fopen("stalpi.out","w");
    fscanf(f,"%ld",&n);
    for(i=1;i<=n;i++)
     { fscanf(f,"%ld%ld%ld%ld",&x[i],&c[i],&st[i],&dr[i]); sol+=c[i];}
   // sortez dupa x
     for(i=n/2;i>=1;i--) heapdown(i,n);
     for(i=n;i>=1;i--){ swap(1,i);
                        heapdown(1,i-1);
                        }

    //sol x[i]
    i=1;
    cmin(i);
    //afisare sol
    fprintf(g,"%ld",sol);

    fcloseall();
    return 0;
}

void heapdown(long int ii, long int nn)
{    long int is, id;
     is=ii*2;
     id=ii*2+1;
     if(is>nn) return;
     if(nn%2==1) if(x[is]<x[id]) is=id;
     if(x[ii]<x[is]){ swap(is,ii);
                      heapdown(is,nn);
                      }
}
void swap(long int aa, long int bb)
{    long int aux;
     aux=x[aa]; x[aa]=x[bb]; x[bb]=aux;
     aux=c[aa]; c[aa]=c[bb]; c[bb]=aux;
     aux=st[aa]; st[aa]=st[bb]; st[bb]=aux;
     aux=dr[aa]; dr[aa]=dr[bb]; dr[bb]=aux;
}
void cmin(long int i)
{
     if(viz<n)
     {  int aux;
        //da
        Ct+=c[i];
        aux=viz;
        for(j=i-1;x[j]>=i-st[i]&&j>=1;j++)
           viz++;
        for(j=i+1;x[j]<=i+dr[i]&&j<=n;j++)
           viz++;
        if(viz==n) if(sol>Ct) sol=Ct;
        else cmin(i+1);
       viz=aux;
       Ct-=c[i];
        cmin(i++);
      }
}