Pagini recente » Cod sursa (job #1032326) | Cod sursa (job #2655278) | Cod sursa (job #69796) | Cod sursa (job #1515893) | Cod sursa (job #2890890)
#include <cstdio>
using namespace std;
int v[30005], t[30005];
int n, l, r;
int ok(double med){
int i, j = 1, s = 0;
for(i = l;i <= n;i++){
if(i - j + 1 > r){
j++;
}
while(j <= i && (double)v[j] / (double)t[j] < med)
j++;
if(i - j + 1>= l)
return 1;
}
return 0;
}
double bs(double st, double dr){
double med;
int i;
for(i = 0;i < 40;i++){
med = (st + dr) / 2;
if(ok(med))
st = med;
else
dr = med;
}
return med;
}
int main()
{
freopen("secv3.in", "r", stdin);
freopen("secv3.out", "w", stdout);
int i, j, sv = 0, st = 0;
double x, s = 0., sol;
scanf("%d%d%d", &n, &l, &r);
for(i = 1;i <= n;i++){
scanf("%d", &v[i]);
}
for(i = 1;i <= n;i++){
scanf("%d", &t[i]);
}
x = bs(0.0, 1000.0);
j = 1;
for(i = 1;i < l;i++){
sv += v[i];
st += t[i];
}
for(i = l;i <= n;i++){
sv += v[i];
st += t[i];
if(i - j + 1 > r){
sv -= v[j];
st -= t[j];
j++;
}
while(j <= i && (double)v[j] / (double)t[j] < x){
sv -= v[j];
st -= t[j];
j++;
}
if(i - j + 1 >= l)
sol = (double)sv / (double)st;
}
printf("%lf", sol);
return 0;
}