Cod sursa(job #1537053)

Utilizator algebristulFilip Berila algebristul Data 26 noiembrie 2015 21:31:11
Problema Secventa 3 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.67 kb
#include <iostream>
#include <iomanip>
#include <fstream>

#define FILEIN "secv3.in"
#define FILEOUT "secv3.out"

const int NMAX = 30005;

using namespace std;

int l, u, n;
int c[NMAX];
int t[NMAX];

int main() {
    double ans = 0;
    int poz = 1;
    int beg = 0;
    int cs  = 0;
    int ts  = 0;
    int len = 0;

    freopen(FILEIN, "r", stdin);
    freopen(FILEOUT, "w", stdout);

    cin >> n >> l >> u;
    for (int i = 1; i <= n; i++) {
        cin >> c[i];
    }
    for (int i = 1; i <= n; i++) {
        cin >> t[i];
    }

    int i = 1;
    while (i <= n) {
        if (len < l) {
            if (len == 0) {
                beg = i;
            }
            cs += c[i];
            ts += t[i];
            i++;
            len++;
        } else {
            if (len < u) {
                long long tmp1 = 1LL * cs * (ts + t[i]);
                long long tmp2 = 1LL * ts * (cs + c[i]);
            
                if (tmp2 > tmp1) {
                    cs += c[i];
                    ts += t[i];

                    i++;
                    len++;
                } else {
                    cs = c[i];
                    ts = t[i];
                    len = 1;
                    beg = i;

                    i++;
                }
            }
            else
            if (len == u) {
                cs -= c[beg];
                ts -= t[beg];
                beg++;
                len--;
            }
        }

        ans = max(ans, (double)cs / ts);
    }

    while (len >= l) {
        cs -= c[beg];
        ts -= t[beg];
        beg++;
        len--;

        ans = max(ans, (double)cs / ts);
    }

    cout << setprecision(2) << fixed << ans << '\n';


    return 0;
}