Cod sursa(job #95324)

Utilizator anamaria1Ozorchevici Ana Maria anamaria1 Data 28 octombrie 2007 11:35:05
Problema Secventa 3 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.59 kb
#include<fstream.h>
#include<iomanip.h>
#define dim 20//30000
int cost[dim+1],timp[dim+1];
struct secv
 {unsigned long c,t;
 };
secv v[dim][2];
int main()
{ifstream f("secv3.in");
ofstream g("secv3.out");
int n,u,l,i,j,nr,nr2,n2,ok;
long double max,aux;
f>>n>>l>>u;
for(i=1;i<=n;i++) f>>cost[i];
for(i=1;i<=n;i++) f>>timp[i];
f.close();
v[1][0].c=v[1][0].t=0;
for(i=1;i<=l;i++) {v[1][0].c+=cost[i];v[1][0].t+=timp[i];}
max=(long double)v[1][0].c/v[1][0].t;
nr=1;
for(i=l+1;(i<=u)&&(i<=n);i++)
 {nr2=nr+1;
  v[nr2][0].c=v[nr][0].c+cost[i];v[nr2][0].t=v[nr][0].t+timp[i];
  aux=(long double)v[nr2][0].c/v[nr2][0].t;
  if(aux>max) max=aux;
  nr=nr2;
 }
n2=n-l+1;ok=1;
for(i=2;i<=n2;i++)
 if(ok)
  {v[1][1].c=v[1][0].c-cost[i-1]+cost[i+l-1];
   v[1][1].t=v[1][0].t-timp[i-1]+timp[i+l-1];
   aux=(long double)v[1][1].c/v[1][1].t;
   if(aux>max) max=aux;
   nr=1;
   for(j=l+1;(j<=u)&&((i+j-1)<=n);j++)
    {nr2=nr+1;
     v[nr2][1].c=v[nr][1].c+cost[i+j-1];v[nr2][1].t=v[nr][1].t+timp[i+j-1];
     aux=(long double)v[nr2][1].c/v[nr2][1].t;
     if(aux>max) max=aux;
     nr=nr2;
    }
   ok=0;
  }
  else
   {v[1][0].c=v[1][1].c-cost[i-1]+cost[i+l-1];
    v[1][0].t=v[1][1].t-timp[i-1]+timp[i+l-1];
    aux=(long double)v[1][0].c/v[1][0].t;
    if(aux>max) max=aux;
    nr=1;
    for(j=l+1;(j<=u)&&((i+j-1)<=n);j++)
     {nr2=nr+1;
      v[nr2][0].c=v[nr][0].c+cost[i+j-1];v[nr2][0].t=v[nr][0].t+timp[i+j-1];
      aux=(long double)v[nr2][0].c/v[nr2][0].t;
      if(aux>max) max=aux;
      nr=nr2;
     }
    ok=1;
   }
g<<setprecision(2)<<max<<'\n';
g.close();
return 0;
}