Cod sursa(job #2371957)

Utilizator BogdanRazvanBogdan Razvan BogdanRazvan Data 6 martie 2019 20:29:21
Problema Secventa 3 Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <iostream>

using namespace std;
int c[30005], t[30005], d[30005];
int main()
{
    freopen("secv3.in", "r", stdin);
    freopen("secv3.out", "w", stdout);
    int n, mn, mx;
    scanf("%d%d%d", &n, &mn, &mx);
    for(int i = 1; i <= n; ++i) scanf("%d", &c[i]);
    for(int i = 1; i <= n; ++i) scanf("%d", &t[i]);
    double ans = 0;
    int F = 1, L = 0, sum1 = 0, sum2 = 0;
    for(int i = 1; i <= mn; ++i) d[++L] = i, sum1 += c[i], sum2 += t[i];
    ans = max(ans, 1.0 * sum1 / sum2);
    for(int i = mn + 1; i <= n; ++i) {
            sum1 += c[i], sum2 += t[i];
            ans = max(ans, 1.0 * sum1 / sum2);
            d[++L] = i;
        while(L - F + 1 > mn && 1.0 * (sum1 - c[d[F]]) / (sum2 - t[d[F]])) {
            sum1 -= c[d[F]], sum2 -= t[d[F]], ++F;
            ans = max(ans, 1.0 * sum1 / sum2);
        }
        if(L - F + 1 == mx) sum1 -= c[d[F]], sum2 -= t[d[F]], ++F;
        ans = max(ans, 1.0 * sum1 / sum2);
    }
    while(L - F + 1 > mn && 1.0 * (sum1 - c[d[F]]) / (sum2 - t[d[F]])) {
            sum1 -= c[d[F]], sum2 -= t[d[F]], ++F;
            ans = max(ans, 1.0 * sum1 / sum2);
        }
    printf("%f", ans);
    return 0;
}