Cod sursa(job #135742)

Utilizator anna_bozianuBozianu Ana anna_bozianu Data 14 februarie 2008 13:22:04
Problema Secventa 3 Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include<stdio.h>   
long int n,l,u,i,cit,c[30002],t[30002],start,stop,ts,cs;   
double cd,td,sol;   
void prel(long int pc,long int update);   
int main()   
{   
    FILE *f,*g;f=fopen("secv3.in","r");g=fopen("secv3.out","w");   
    fscanf(f,"%ld%ld%ld",&n,&l,&u);   
    for(i=1;i<=n;i++){ fscanf(f,"%ld",&cit);c[i]=c[i-1]+cit;}   
    for(i=1;i<=n;i++){ fscanf(f,"%ld",&cit);t[i]=t[i-1]+cit;}   
        ts=1;   
    for(start=1;start<=n+1-u;start++)
    { stop=u+start-1;
      prel(start+l-1,1);
    }
    for(start=n+2-u;start<=n+1-l;start++)
    { stop=n;
      prel(start+l-1,1);
    }
    cd=(double)cs;td=(double)ts;
    sol=cd/td;
    fprintf(g,"%.3lf",sol);
    fcloseall();
    return 0;
}
void prel(long int pc,long int update)
{       long int upd,cc,tt,ccc,ttt;
    upd=update;
    cc=c[pc]-c[start-1];tt=t[pc]-t[start-1];
    if(cc*ts>cs*tt){cs=cc;ts=tt;}
    if(pc+upd>stop)return;
    while(pc+upd<=stop)
    { ccc=c[pc+upd]-c[start-1];ttt=t[pc+upd]-t[start-1];
      if(ccc*tt>cc*ttt)prel(pc+upd,2*upd);
      upd=2*upd;
    }
}