Cod sursa(job #1718534)

Utilizator SburlyAndrei Florin Sburly Data 18 iunie 2016 10:15:55
Problema Secventa 3 Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.8 kb
/********************
    Created by Sburly
********************/
#include <fstream>

using namespace std;

struct secv{
    int length;
    int d;
    int p;
    double val;
    bool b = true;
};

unsigned int l,u,n;

unsigned int a[30000];
unsigned int b[30000];

secv v[30000];

secv ks(int i);
inline double norm(double a);

int main()
{
    ifstream f("secv3.in");
    ofstream g("secv3.out");

    f >> n >> l >> u;

    for(unsigned int i = 0 ; i < n; i++)
    {
        f >> a[i];
    }
    for(unsigned int i = 0 ; i < n; i++)
    {
        f >> b[i];
    }

    double mx = -1;
    for(unsigned int i = 0 ; i < n; i++)
    {
        secv temp = ks(i);
        if(l <= temp.length && temp.length <= u)
        {
            mx = max(temp.val, mx);
        }
    }
    g << norm(mx);


    return 0;
}

secv ks(int i)
{
    if(i == 0)
    {
        if(v[i].b)
        {
            v[i].b = false;
            v[i].d= a[i];
            v[i].p= b[i];
            v[i].val = (double) a[i] / b[i];
            v[i].length = 1;
        }
        return v[i];
    }
    else
    {
        if(v[i].b)
        {
            v[i].b = false;
            double temp = (double) a[i] / b[i];
            if(temp > v[i-1].val)
            {
                v[i].val = temp;
                v[i].d = a[i];
                v[i].p = b[i];
                v[i].length = 1;
            }
            else
            {
                v[i].d = v[i-1].d + a[i];
                v[i].p = v[i-1].p + b[i];
                v[i].val = (double) v[i].d / v[i].p;
                v[i].length = v[i-1].length+1;
            }
        }
        return v[i];
    }
}
inline double norm(double a)
{
    a *= 100;
    int b = a;
    a = (float) b/100;
    return a;
}