Cod sursa(job #2045406)

Utilizator borscalinCalin-Stefan Georgescu borscalin Data 22 octombrie 2017 12:52:17
Problema Secventa 3 Scor 80
Compilator c Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <stdio.h>
#include <stdlib.h>
#define NMAX 100000

int d[1 + NMAX];
int v[1 + NMAX], t[1 + NMAX];

int main(){
    int n, l, u;
    FILE *f = fopen("secv3.in", "r");
    fscanf(f, "%d%d%d", &n, &l, &u);
    for (int i = 0; i < n; ++i)
        fscanf(f, "%d", &v[i]);
    for (int i = 1; i < n; ++i)
        v[i] += v[i - 1];
    for (int i = 0; i < n; ++i)
        fscanf(f, "%d", &t[i]);
    for (int i = 1; i < n; ++i)
        t[i] += t[i - 1];
    int st = 0, dr = 0;
    double maxim = 1.0 * v[l - 1] / t[l - 1];
    for (int i = l; i < n; ++i) {
            if (st <= dr && d[st] <= i - u)
                ++st;
            while (st <= dr && 1.0 * (v[i] - v[d[dr] - 1]) / (t[i] - t[d[dr] - 1]) < 1.0 * (v[i] - v[i - l]) / (t[i] - t[i - l]))
                --dr;
            d[++dr] = i - l + 1;
            if (1.0 * (v[i] - v[d[dr] - 1]) / (t[i] - t[d[dr] - 1]) > maxim)
                maxim = 1.0 * (v[i] - v[d[dr] - 1]) / (t[i] - t[d[dr] - 1]);
    }
    fclose(f);
    f = fopen("secv3.out", "w");
    fprintf(f, "%.2lf", maxim);
    fclose(f);
    return 0;
}