Pagini recente » Cod sursa (job #3178212) | Cod sursa (job #1846923) | Cod sursa (job #476124) | Cod sursa (job #1089995) | Cod sursa (job #1469598)
#include <stdio.h>
#include <deque>
#include <utility>
#include <algorithm>
#define st first
#define nd second
#define mp make_pair
#define ppb pop_back
#define ppf pop_front
#define psb push_back
#define psf push_front
using namespace std;
const int NM = 30005;
int N,L,U,it;
int C[NM],T[NM];
double Sol;
deque< int > D;
double Div(int Cost,int Timp)
{
return (double(Cost) / double(Timp));
}
int main()
{
freopen("secv3.in","r",stdin);
freopen("secv3.out","w",stdout);
scanf("%d %d %d",&N,&L,&U);
for (int i = 1;i <= N;i++)
scanf("%d",&C[i]);
for (int i = 1;i <= N;i++)
scanf("%d",&T[i]);
int Cost = 0,Timp = 0;
for (int i = 1;i <= N;i++)
{
D.psb(i);
Cost += C[i];
Timp += T[i];
while (D.size() > U)
Cost -= C[D.front()],Timp -= T[D.front()],D.ppf();
if (D.size() >= L)
Sol = max(Sol,Div(Cost,Timp));
while(D.size() > 1 && N - D.front() + 1 >= L && Div(Cost - C[D.front()],Timp - T[D.front()]) > Div(Cost,Timp))
{
Cost -= C[D.front()];
Timp -= T[D.front()];
D.ppf();
if (D.size() >= L)
Sol = max(Sol,Div(Cost,Timp));
}
if (D.size() >= L)
Sol = max(Sol,Div(Cost,Timp));
}
printf("%.2f",Sol);
return 0;
}