Pagini recente » Cod sursa (job #2745411) | Cod sursa (job #2652878) | Cod sursa (job #623257) | Cod sursa (job #786254) | Cod sursa (job #1483610)
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <deque>
#define maxN 30002
#define maxA 100000
#define ll long long
using namespace std;
int n, i, j, l, u;
ll s[maxN];
struct elem
{
int c, t;
}v[maxN];
deque < int > d;
void read()
{
freopen("secv3.in", "r", stdin);
scanf("%d %d %d", &n, &l, &u);
for (i = 1; i <= n; ++ i)
scanf("%d", &v[i].c),
v[i].c *= 100;
for (i = 1; i <= n; ++ i)
scanf("%d", &v[i].t);
}
bool ok(int x)
{
int i;
for (i = 1; i <= n; ++ i)
s[i] = s[i - 1] + v[i].c - x * v[i].t * 1LL;
d.clear();
for (i = l; i <= n; ++ i)
{
while (!d.empty() && s[i - l] <= s[d.back()])
d.pop_back();
d.push_back(i - l);
if (!d.empty() && i - d.front() > u)
d.pop_front();
if (!d.empty() && s[i] - s[d.front()] >= 0)
return 1;
}
return 0;
}
double bs()
{
int i = 0, p = 1 << 16;
double nr;
while (p)
{
if (i + p <= maxA && ok(i + p))
i += p;
p /= 2;
}
nr = i * 1.00;
nr = (double)(nr / 100);
return nr;
}
void write()
{
freopen("secv3.out", "w", stdout);
printf("%.2lf\n", bs());
}
int main()
{
read();
write();
return 0;
}