Cod sursa(job #956324)

Utilizator alexpetrescuAlexandru Petrescu alexpetrescu Data 2 iunie 2013 20:59:21
Problema Branza Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 0.7 kb
#include <stdio.h>
int d[10000000],k,s,n,st,dr,v[10000000],a;
int calc2(int q){
    return v[d[st]]+(a*(q-d[st]));
}
int calc1(int q){
    return v[d[dr]]+(a*(q-d[dr]));
}
void stanga(int i){
    if(i-d[st]==k){
        st++;
    }
}
void dreapta(int i){
    while((st<=dr)&&(v[i]<=calc1(i))){
        dr--;
    }
}
int main(){
    int i,j,x,s=0;
    FILE *fin,*fout;
    fin=fopen("branza.in","r");
    fout=fopen("branza.out","w");
    fscanf(fin,"%d%d%d",&n,&a,&k);
    i=0;
    st=1;
    while(i<n){
        i++;
        fscanf(fin,"%d%d",&v[i],&x);
        stanga(i);
        dreapta(i);
        dr++;
        d[dr]=i;
        s+=x*calc2(i);
    }
    fprintf(fout,"%d",s);
}