Cod sursa(job #3289297)

Utilizator bagae123Burlacu Andrei bagae123 Data 26 martie 2025 14:29:07
Problema Secventa 3 Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.58 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)
            {
                while(raport2-raport1>0&&dq.size()>l)
                {
                    dq.pop_front();

                    raport1=(sumA[i]-sumA[dq.front()-1])/(sumB[i]-sumB[dq.front()-1]);
                    raport2=(sumA[i]-sumA[dq.front()-1]-a[dq.front()]+a[i])/(sumB[i]-sumB[dq.front()-1]-b[dq.front()]+b[i]);
                }
                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;
}