Cod sursa(job #2371952)

Utilizator BogdanRazvanBogdan Razvan BogdanRazvan Data 6 martie 2019 20:27:13
Problema Secventa 3 Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.05 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) {
        if(L - F + 1 < mx && 1.0 * (sum1 + c[i]) / (sum2 + t[i]) > 1.0 * sum1 / sum2) {
            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;
    }
    printf("%f", ans);
    return 0;
}