Cod sursa(job #1689004)

Utilizator Mihai9Oniga Mihai Mihai9 Data 13 aprilie 2016 21:03:27
Problema Traseu Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.44 kb
#include <fstream>
#include <iomanip>
#define nmax 30100
using namespace std;
class fractie {
    public:
        int Timp,Cost;
    public:
        fractie() {
            Cost=Timp=0;
            }
        fractie operator+(fractie A) {
            fractie Tmp;
            Tmp.Cost=Cost+A.Cost;
            Tmp.Timp=Timp+A.Timp;
            return Tmp;
            }
};
fractie Fractie[nmax];
int N,L,U;
double Answer;
double Raport(fractie X) {
    return (1.0*X.Cost/X.Timp);
}
void solve() {
    int i,Length;
    fractie Sum,Best;
    for(i=1;i<L;i++) {
        Sum.Cost+=Fractie[i].Cost;
        Sum.Timp+=Fractie[i].Timp;
        }
    Length=U;
    for(i=L;i<=N;i++) {
        Sum.Cost+=Fractie[i].Cost-Fractie[i-L].Cost;
        Sum.Timp+=Fractie[i].Timp-Fractie[i-L].Timp;
        if(Raport(Sum) < Raport(Best+Fractie[i]) && Length < U) {
            Length++;
            Best=Best+Fractie[i];
            }
        else {
            Length=L;
            Best=Sum;
            }
        if(Answer < Raport(Best))
            Answer=Raport(Best);
        }
}
void read() {
    ifstream in("secv3.in");
    in>>N>>L>>U;
    for(int i=1;i<=N;i++)
        in>>Fractie[i].Cost;
    for(int i=1;i<=N;i++)
        in>>Fractie[i].Timp;
}
void write() {
    ofstream out("secv3.out");
    out<<fixed<<setprecision(2)<<Answer<<'\n';
}
int main() {
    read();
    solve();
    write();
    return 0;
}