Cod sursa(job #60376)

Utilizator peanutzAndrei Homorodean peanutz Data 13 mai 2007 22:42:06
Problema Secventa 3 Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.86 kb
#include <stdio.h>

#define NMAX 30100

short a[NMAX], b[NMAX];
int n, l, u;
double max;

void read()
{
	int i;
  #define dim 10000
  char buf[dim];int poz = 0;
  fread(buf,1,dim,stdin);
  #define cit(x)                         \
  {                                      \
   x = 0;                                \
   while(buf[poz] < '0')                 \
    {                                    \
     ++poz;                              \
     if(poz == dim)                      \
       fread(buf,1,dim,stdin), poz = 0;  \
    }                                    \
   while(buf[poz] >= '0')                \
    {                                    \
     x = x*10 + buf[poz] - '0';          \
     if(++poz == dim)                    \
      fread(buf,1,dim,stdin), poz = 0;   \
    }                                    \
  }
  cit(n);cit(l);cit(u);
//	scanf("%d %d %d\n", &n, &l, &u);

	for(i = 1; i <= n; ++i)
	{
	//	scanf("%d", &a[i]);
	cit(a[i]);
	}
	for(i = 1; i <= n; ++i)
	{
    //		scanf("%d", &b[i]);
    cit(b[i]);
	}
}

void solve()
{
	int i, j;
	short inc, sf;
	double s1, s2;
	double scade1, scade2;

	s1 = s2 = 0;

	for(i = 1; i <= l; ++i)
	{
		s1 += a[i];
		s2 += b[i];
	}

	inc = 1;
	sf = l;

	max = s1 / s2;

	while(sf <= n)
	{
		if(max * s2 < s1 )
			max = s1 / s2;

		scade1 = scade2 = 0;

		for(i = sf+1; i <= (sf + (u - l)) && i <= n; ++i)
		{
			s1 += a[i];
			s2 += b[i];

			scade1 += a[i];
			scade2 += b[i];

			if(max * s2< s1 )
				max = s1 / s2;
		}



		s1 -= a[inc]+scade1;
		s2 -= b[inc]+scade2;

		++inc, ++sf;

		s1 += a[sf];
		s2 += b[sf];
	}
}

int main()
{
	freopen("secv3.in", "r", stdin);
	freopen("secv3.out", "w", stdout);

	read();

	solve();

	printf("%.2lf\n", max);

	fclose(stdin);
	fclose(stdout);

	return 0;
}