Submission #1141905

#TimeUsernameProblemLanguageResultExecution timeMemory
1141905hennesseySelf Study (JOI22_ho_t2)C++20
100 / 100
200 ms11244 KiB
#include <bits/stdc++.h>

using namespace std;

#define int long long

signed main() {
    //your code goes here
    // for(int i = 0; i < 1; i++) {
    int n, m;
    cin >> n >> m;
    // n = rand()%1000;
    // m = 1;
    vector <int> arr = {};
    vector <int> arr2 = {};
    vector <int> arr3 = {};
    for(int i = 0; i < n; i++) {
        int num;
        cin >> num;
        arr.push_back(num);
    }
    for(int i = 0; i < n; i++) {
        int num;
        cin >> num;
        arr2.push_back(num);
    }
    // for(int i = 0; i < n; i++) {
    //     arr[i] = (rand()%100)+1;
    //     arr2[i] = (rand()%100)+1;
    // }
    for(int i = 0; i < n; i++) {
        int v = max(arr[i], arr2[i]);
        int v2 = v*m;
        arr3.push_back(v2);
    }
    int ans = 0;
    int lo = 0;
    int hi = 1e18;
    int minv = 1e18;
    for(int i = 0; i < n; i++) {
        int v = max(arr[i], arr2[i]);
        minv = min(minv, v);
    }
    // cout << "HELLO" << endl;
    while(lo <= hi) {
        // cout << n << endl;
        int mid = (lo+hi)/2;
        int total = 0;
        for(int i = 0; i < n; i++) {
            if(total >= 1e18) {
                break;
            }
            int v = arr3[i];
            int v2 = mid-v;
            int v3 = arr[i];
            int v4 = arr2[i];
            if(v2 == 0) {
                continue;
            }
            // cout << v << " " << v2 << " " << v3 << " " << v4 << " " << lo << " " << hi << endl;
            if(v2 > 0) {
                int v5 = (v2/v4);
                if((v2%v4) != 0) {
                    v5++;
                }
                // cout << v2 << " " << v4 << " " << v5 << " " << v2%v4 << " " << total << endl;
                total += v5;
            } else {
                int v5 = abs(v2)/max(v3, v4);
                // cout << abs(v2) << " " << max(v3, v4) << " " << v5 << endl;
                total -= v5;
            }
        }
        if(total <= 0) {
            ans = max(ans, mid);
            // if(ans > minv) {    
            //     cout << 1e18 << endl;
            //     break;
            // }
            // if(ans > minv) {
            //     cout << total << " " << mid << endl;
            //     break;
            // }
            lo = mid+1;
        } else {
            hi = mid-1;
        }
    }
    // if(m == 1) {
    //     if(ans == minv) {
    //         continue;
    //     } else {
    //         cout << "FOUND" << endl;
    //         cout << n << " " << m << endl;
    //         // for(int i = 0; i < n; i++) {
    //         //     cout << arr[i] << " ";
    //         // }
    //         // cout << endl;
    //         // for(int i = 0; i < n; i++) {
    //         //     cout << arr2[i] << " ";
    //         // }
    //         // cout << endl;
    //         cout << minv << " " << ans << endl;
    //         break;
    //     }
    // }
    cout << ans << endl;
    // }
    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...