Cod sursa(job #135739)

Utilizator anna_bozianuBozianu Ana anna_bozianu Data 14 februarie 2008 13:15:10
Problema Secventa 3 Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 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-u+1;start++)   
    { stop=u-start+1;   
      prel(start+l-1,1);   
    }   
    for(start=n-u;start<=n-l+1;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;   
    }   
}