Cod sursa(job #2720524)

Utilizator DragosC1Dragos DragosC1 Data 10 martie 2021 22:19:54
Problema Secventa 3 Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.37 kb
#include <fstream>
#include <deque>
#include <iostream>
#include <iomanip>
using namespace std;

int n, L, R;
int cost[30001];
int timp[30001];
int spc[30001], spt[30001];
double Max = 0.00;

void read() {
	int i;
	ifstream f("secv3.in");
	f >> n >> L >> R;
	for (i = 1; i <= n; i++)
		f >> cost[i];
	for (i = 1; i <= n; i++)
		f >> timp[i];
	f.close();
}

void solve() {
	int i;
	double x, y, z;
	deque<int> dq;
	for (i = 1; i <= n; i++) {
		spc[i] = spc[i - 1] + cost[i];
		spt[i] = spt[i - 1] + timp[i]; 
		dq.push_back(i);
		if (dq.size() >= L) {
			if ((spc[dq.back()] - spc[dq.front() - 1]) * 1.0 / (spt[dq.back()] - spt[dq.front() - 1]) > Max) 
				Max = (spc[dq.back()] - spc[dq.front() - 1]) * 1.0 / (spt[dq.back()] - spt[dq.front() - 1]);
			while (dq.size() >= L) {
				x = (spc[dq.back()] - spc[dq.front() - 1]) * 1.0 / (spt[dq.back()] - spt[dq.front() - 1]);
				y = (spc[dq.back()] - spc[dq.front()]) * 1.0 / (spt[dq.back()] - spt[dq.front()]);
				if (x <= y)
					dq.pop_front();
				else break;
			}
			if (dq.size() >= R)
				dq.pop_front();
		}
	}
	x = (spc[dq.back()] - spc[dq.front() - 1]) * 1.0 / (spt[dq.back()] - spt[dq.front() - 1]);
	if (x > Max)
		Max = x;
}

void output() {
	ofstream g("secv3.out");
	g << setprecision(2) << fixed << Max;
	g.close();
}

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