Cod sursa(job #2707134)

Utilizator crismariuCrismariu Codrin crismariu Data 16 februarie 2021 15:43:59
Problema Secventa 3 Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.39 kb
#include <bits/stdc++.h>
//#pragma GCC optimize("O3")
#define test " test "
#define ll long long
#define pii pair<int, int>
#define FASTIO   \
    cin.tie(0);  \
    cout.tie(0); \
    ios_base::sync_with_stdio(0);
#define FILES                      \
    freopen("secv3.in", "r", stdin); \
    freopen("secv3.out", "w", stdout);
#define testcase             \
    int T;    \
    cin >> T; \
    while (T--)
#define vec vector<int>
using namespace std;

vector<pii> v;
int n;

float slide(int mid)
{
    int s1 = 0, s2 = 0;
    for(int i = 1; i <= mid; i++)
        s1 += v[i].first, s2 += v[i].second;

    float mx1 = float(s1) / s2;

    for(int i = mid + 1; i <= n; i++)
        s1 += v[i].first, s2 += v[i].second, s1 -= v[i - mid].first, s2 -= v[i - mid].second, mx1 = max(mx1, float(s1) / s2);

    return mx1;
}

signed main()
{
    int l, r;
    cin >> n >> l >> r;
    v.resize(n + 1);
    for(int i = 1; i <= n; i++)
        cin >> v[i].first;
    for(int i = 1; i <= n; i++)
        cin >> v[i].second;

    float mx = 0;
    while(l < r - 1)
    {
        int mid1 = (l + r) / 2 - 1, mid2 = mid1;
        float res1 = slide(mid1);
        float res2 = slide(mid2);
        if(res1 > res2)
            r = res1;
        else
            l = res2;
        mx = max(mx, max(res1, res2));
    }
    cout << max(max(mx, slide(l)), slide(r));
    return 0;
}