Cod sursa(job #135724)

Utilizator anna_bozianuBozianu Ana anna_bozianu Data 14 februarie 2008 11:44:09
Problema Secventa 3 Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 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;
	}
}