Submission #1154089

#TimeUsernameProblemLanguageResultExecution timeMemory
1154089KK_1729Self Study (JOI22_ho_t2)C++17
100 / 100
154 ms5096 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long
#define FOR(i,a,b) for (int i = (a); i < (b); ++i)
#define pb push_back
#define all(a) a.begin(), a.end()
#define endl "\n"

void printVector(vector<int> a){
	for (auto x: a) cout << x << " ";
	cout << endl;
}
void solve(){
	int n, m; cin >> n >> m;
	vector<int> a(n);
	FOR(i,0,n) cin >> a[i];

	
	vector<int> b(n);
	FOR(i,0,n) cin >> b[i];

	int l = 0; int r = 1e18;
	int ans = 0;
	int c = 0;
	while (l <= r){
		if (l == r) c++;
		if (c > 2) break;
		int mid = (l+r)/2ll;

		int tot = 0ll;
		bool can = true;
		FOR(i,0,n){
			int curr = 0;
			if (a[i] > b[i]){
				if (m*a[i] < mid){
					int u = mid-m*a[i];
					curr += m;
					curr += (u+b[i]-1)/b[i];
				}else{
					curr += (mid+a[i]-1)/a[i];
				}
			}else{
				curr += (mid+b[i]-1)/b[i];
			}
			tot += curr;
			if (tot > n*m){
				can = false;
				break;
			}
		}
		if (tot <= n*m && can){
			ans = max(ans, mid);
			if (l+1ll == r){
				l = r;
			}else{
				l = mid;
			}
		}else{
			if (l+1 == r){
				ans = l;
				break;
			}
			r = mid;
		}
	}	

	cout << ans << endl;
}

int32_t main(){
	ios::sync_with_stdio(false);cin.tie(nullptr);
	int t = 1; // cin >> t;
	while (t--) solve();
}
#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...