Cod sursa(job #1849897)

Utilizator cyg_vladioanBirsan Vlad cyg_vladioan Data 17 ianuarie 2017 22:32:03
Problema Secventa 3 Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.51 kb
#include <cstdio>
#include <queue>
using namespace std;
const int NMAX = 30000;
float c[NMAX + 5] , t[NMAX + 5];
int main()
{
    freopen("secv3.in" , "r" , stdin);
    freopen("secv3.out" , "w" , stdout);
    int n , l , u , val , i , st , dr;
    float smax;
    scanf("%d%d%d" , &n , &l , &u);
    for(i = 1 ; i <= n ; i ++)
        scanf("%d" , &val) , c[i] = c[i - 1] + val;
    for(i = 1 ; i <= n ; i ++)
        scanf("%d" , &val) , t[i] = t[i - 1] + val;
    smax = 0;
    for(st = dr = 1 ; dr <= n ; dr ++)
    {
        if(dr - st + 1 >= l)
        {
            if((c[dr] - c[st - 1]) / (t[dr] - t[st - 1]) > smax)
                smax = (c[dr] - c[st - 1]) / (t[dr] - t[st - 1]);
            while((c[dr] - c[st - 1]) / (t[dr] - t[st - 1]) <= smax && st <= dr)
                st ++;
            smax = (c[dr] - c[st - 1]) / (t[dr] - t[st - 1]);
        }
        if(dr - st + 1 > u)
        {
            if((c[dr] - c[st - 1]) / (t[dr] - t[st - 1]) > smax)
                smax = (c[dr] - c[st - 1]) / (t[dr] - t[st - 1]);
            while((c[dr] - c[st - 1]) / (t[dr] - t[st - 1]) <= smax && st <= dr)
            {
                if((c[dr] - c[st - 1]) / (t[dr] - t[st - 1]) > smax)
                    smax = (c[dr] - c[st - 1]) / (t[dr] - t[st - 1]);
                st ++;
            }
            if((c[dr] - c[st - 1]) / (t[dr] - t[st - 1]) > smax)
                smax = (c[dr] - c[st - 1]) / (t[dr] - t[st - 1]);
        }
    }
    printf("%.2f\n" , smax);
    return 0;
}