Cod sursa(job #3289292)

Utilizator bagae123Burlacu Andrei bagae123 Data 26 martie 2025 13:58:32
Problema Secventa 3 Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.27 kb
#include <fstream>
#include<deque>
#include<cmath>
#include<iomanip>
using namespace std;
ifstream fin("secv3.in");
ofstream fout("secv3.out");

const int NMax=30000;
double sumA[NMax+5];
double sumB[NMax+5];
double a[NMax+5];
double b[NMax+5];
deque<int>dq;
int main()
{
    int n,l,r;
    fin>>n>>l>>r;
    for(int i=1; i<=n; i++)
    {
        fin>>a[i];
        sumA[i]=sumA[i-1]+a[i];
    }
    for(int i=1; i<=n; i++)
    {
        fin>>b[i];
        sumB[i]=sumB[i-1]+b[i];
    }
    double Max=0;
    for(int i=1; i<=n; i++)
    {


        if(dq.size()<l)dq.push_back(i);
        if(dq.size()<=r&&l<=dq.size())
        {
            int Front=dq.front();
            double raport1=(sumA[i]-sumA[Front-1])/(sumB[i]-sumB[Front-1]);
            double raport2=(sumA[i]-sumA[Front-1]-a[Front]+a[i])/(sumB[i]-sumB[Front-1]-b[Front]+b[i]);
            if(raport1-raport2>0&&dq.size()<r)dq.push_back(i);
            else if(raport2-raport1>0)
            {
                dq.pop_front();
                dq.push_back(i);
            }
            if((sumA[i]-sumA[dq.front()-1])/(sumB[i]-sumB[dq.front()-1])>Max)Max=(sumA[i]-sumA[dq.front()-1])/(sumB[i]-sumB[dq.front()-1]);
        }
    }
    fout<<fixed<<setprecision(2)<<Max;

    return 0;
}