Cod sursa(job #2455095)

Utilizator BogdanRazvanBogdan Razvan BogdanRazvan Data 10 septembrie 2019 19:29:28
Problema Secventa 3 Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.68 kb
#include <bits/stdc++.h>

using namespace std;


ifstream fin ("secv3.in");
ofstream fout ("secv3.out");
int c[30005], t[30005];
double f[30005];

deque < double > dq;
int main()
{
    ios::sync_with_stdio(false);
    fin.tie(0);

    int n, mn, mx;
    fin >> n >> mn >> mx;
    for(int i = 1; i <= n; ++i) fin >> c[i];
    for(int i = 1; i <= n; ++i) fin >> t[i];
    for(int i = 1; i <= n; ++i) f[i] = 1.0 * c[i] / t[i];
    double sum = 0.0;
    for(int i = 1; i <= mn; ++i)
        sum += f[i], dq.push_back(f[i]);
    double average = 1.0 * sum / dq.size();
    double sol = average;

    for(int i = mn + 1; i <= n; ++i) {
        while(dq.size() > mn && dq.front() < average) {
            sum -= dq.front();
            dq.pop_front();
            average = 1.0 * sum / dq.size();
            sol = max(sol, average);
        }
        if(dq.size() == mx) {
            sum -= dq.front();
            dq.pop_front();
            average = 1.0 * sum / dq.size();
            while(dq.size() > mn && dq.front() < average) {
                sum -= dq.front();
                dq.pop_front();
                average = 1.0 * sum / dq.size();
                sol = max(sol, average);
            }
            if(dq.size() >= mn) sol = max(sol, average);
        }
        dq.push_back(f[i]);
        sum += f[i];
        average = 1.0 * sum / dq.size();
        sol = max(sol, average);
    }
    while(dq.size() > mn && dq.front() < average) {
            sum -= dq.front();
            dq.pop_front();
            average = 1.0 * sum / dq.size();
            sol = max(sol, average);
    }
    fout << fixed << setprecision(2) << sol;
    return 0;
}