Cod sursa(job #2476)

Utilizator MarcvsHdrMihai Leonte MarcvsHdr Data 17 decembrie 2006 12:08:30
Problema Secventa 3 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.65 kb
# include <stdio.h>

const int MAX=30001;//AICI!!! 30000
int main()
{
int n,l,u,i;struct {long int sus,jos;} lastl[MAX]={0},lastu[MAX]={0},v[MAX]={0};
struct {long int sus,jos; int tra;} max[MAX]={0};
FILE *f=fopen("secv3.in","r");
fscanf(f,"%d%d%d",&n,&l,&u);
for (i=1;i<=n;i++) fscanf(f,"%d",&v[i].sus);
for (i=1;i<=n;i++) fscanf(f,"%d",&v[i].jos);
fclose(f);
//initializari
for (i=1  ;i<=l;i++)
	lastl[l].sus+=v[i].sus,lastl[l].jos+=v[i].jos;
for (i=l+1;i<=n;i++)
	{
	lastl[i].sus=lastl[i-1].sus+v[i].sus-v[i-l].sus;
	lastl[i].jos=lastl[i-1].jos+v[i].jos-v[i-l].jos;
	}
for (i=1  ;i<=u;i++)
	lastu[u].sus+=v[i].sus,lastu[u].jos+=v[i].jos;
for (i=u+1;i<=n;i++)
	{
	lastu[i].sus=lastu[i-1].sus+v[i].sus-v[i-u].sus;
	lastu[i].jos=lastu[i-1].jos+v[i].jos-v[i-u].jos;
	}
max[l].sus=lastl[l].sus;
max[l].jos=lastl[l].jos;
max[l].tra=l;
for (i=l+1;i<=n;i++)
	{
	if ((float)lastl[i].sus/lastl[i].jos>((float)max[i-1].sus+v[i].sus)/(max[i-1].jos+v[i].jos))
		{
		max[i].sus=lastl[i].sus;
		max[i].jos=lastl[i].jos;
		max[i].tra=l;
		}
	else if (max[i-1].tra<u)
		{
		max[i].sus=max[i-1].sus+v[i].sus;
		max[i].jos=max[i-1].jos+v[i].jos;
		max[i].tra=max[i-1].tra+1;
		}
	else
	if ((float)lastl[i].sus/lastl[i].jos>(float)lastu[i].sus/lastu[i].jos)
		{
		max[i].sus=lastl[i].sus;
		max[i].jos=lastl[i].jos;
		max[i].tra=l;
		}
	else
		{
		max[i].sus=lastu[i].sus;
		max[i].jos=lastu[i].jos;
		max[i].tra=u;
		}
	}
float sol=(float)max[l].sus/max[l].jos;
for (i=l+1;i<=n;i++)
	if (sol<(float)max[i].sus/max[i].jos)
		sol=(float)max[i].sus/max[i].jos;
FILE *g=fopen("secv3.out","w");
fprintf(g,"%.2f\n",sol);
fcloseall();
return 0;
}