Cod sursa(job #2883181)

Utilizator iancupoppPopp Iancu Alexandru iancupopp Data 1 aprilie 2022 11:41:31
Problema Secventa 3 Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

const int N = 3e4 + 5;

int spv[N], spc[N];

bool cmp(int l1, int r1, int l2, int r2) {
  ll a = spv[r1] - spv[l1 - 1];
  ll b = spc[r1] - spc[l1 - 1];
  ll c = spv[r2] - spv[l2 - 1];
  ll d = spc[r2] - spc[l2 - 1];
  return a * d >= b * c;
}

int main() {
  ifstream cin("secv3.in");
  ofstream cout("secv3.out");
  int n, l, u;
  cin >> n >> l >> u;
  for (int i = 1; i <= n; ++i) {
    cin >> spv[i];
    spv[i] += spv[i - 1];
  }
  for (int i = 1; i <= n; ++i) {
    cin >> spc[i];
    spc[i] += spc[i - 1];
  }
  cin.close();
  deque<int> dq;
  double ans = 0;
  for (int i = 1; i <= n; ++i) {
    while (!dq.empty() && dq.front() < i - u + 1)
      dq.pop_front();
    if (i >= l) {
      while (!dq.empty() && cmp(i - l + 1, i, dq.back(), i))
        dq.pop_back();
      dq.push_back(i - l + 1);
      ans = max(ans, (double) (spv[i] - spv[dq.front() - 1]) / (spc[i] - spc[dq.front() - 1]));
    }
  }
  cout << fixed << setprecision(2) << ans << "\n";
  cout.close();
  return 0;
}