제출 #636673

#제출 시각아이디문제언어결과실행 시간메모리
636673danikoynovSelf Study (JOI22_ho_t2)C++14
64 / 100
388 ms11332 KiB
/**
 ____ ____ ____ ____ ____ ____
||l |||e |||i |||n |||a |||d ||
||__|||__|||__|||__|||__|||__||
|/__\|/__\|/__\|/__\|/__\|/__\|

**/

#include<bits/stdc++.h>
#define endl '\n'

using namespace std;
typedef long long ll;

void speed()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
}

const ll maxn = 300010;
ll n, m;
ll a[maxn], b[maxn], in[maxn], out[maxn], cp[maxn];

void solve()
{
    cin >> n >> m;
    bool diff = false;
    for (ll i = 1; i <= n; i ++)
        cin >> a[i];
    for (ll i = 1; i <= n; i ++)
    {
        cin >> b[i];
        if (b[i] != a[i])
            diff = true;
    }

    if (m == 1)
    {
        ll mx = 1e9;
        for (int i = 1; i <= n; i ++)
            mx = min(mx, max(a[i], b[i]));
        cout << mx << endl;
    }
    else
    if (!diff)
    {
        double sum = 0;
        for (int i = 1; i <= n; i ++)
            sum = sum + (double)m / (double)(n) * (double)a[i];

        ll lf = 0, rf = ceil(sum);
        while(lf <= rf)
        {
            ll mf = (lf + rf) / 2;
            ll nec = 0;
            for (int i = 1; i <= n; i ++)
            {
                nec = nec + mf / a[i];
                if (mf % a[i] != 0)
                    nec ++;
            }
            if (nec <= n * m)
                lf = mf + 1;
            else
                rf = mf - 1;
        }
        cout << rf << endl;
    }
}

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

#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...