Cod sursa(job #921787)

Utilizator okros_alexandruOkros Alexandru okros_alexandru Data 21 martie 2013 13:41:34
Problema Secventa 3 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.3 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;
	
	in.close();
	
}
void write() {
	
	ofstream out("secv3.out");
	out<<fixed<<setprecision(6)<<Answer<<'\n';
	out.close();

}
int main() {
	
	read();
	solve();
	write();
	
	return 0;
	
}