Pagini recente » Cod sursa (job #2638397) | Cod sursa (job #2426847) | Cod sursa (job #2535653) | Cod sursa (job #2631237) | Cod sursa (job #2569047)
#include <iostream>
#include <fstream>
#include <deque>
#include <iomanip>
using namespace std;
ifstream in("secv3.in");
ofstream out("secv3.out");
const int N_MAX = 3e4;
const double DIF = 0.0001;
deque<pair<double, int>> dq;
int n, l, u;
int c[N_MAX + 10], t[N_MAX + 10];
void scan()
{
in >> n >> l >> u;
for(int i = 1; i <= n; i++)
{
int x;
in >> x;
c[i] = c[i-1] + x;
}
for(int i = 1; i <= n; i++)
{
int x;
in >> x;
t[i] = t[i-1] + x;
}
}
bool check(double val)
{
double v[N_MAX + 10];
for(int i = 1; i <= n; i++)
v[i] = c[i] - t[i] * val;
dq.clear();
for(int i = 1; i < n; i++)
{
while(!dq.empty() && dq.back().first >= v[i])
dq.pop_back();
dq.emplace_back(v[i], i);
if(i - u >= dq.front().second)
dq.pop_front();
if(i >= l && v[i+1] - dq.front().first > 0)
return 1;
}
return 0;
}
int main()
{
scan();
double st = 0.0, dr = 1000.0, mid;
while(dr - st >= DIF)
{
mid = (st + dr) / 2.0;
if(check(mid))
st = mid;
else
dr = mid;
}
out << fixed << setprecision(2) << mid << '\n';
return 0;
}