Submission #869570

#TimeUsernameProblemLanguageResultExecution timeMemory
869570HakiersSelf Study (JOI22_ho_t2)C++17
100 / 100
154 ms11348 KiB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
const int MAXN = 3e5 + 7;
pair<ll, ll> courses[MAXN];
ll n, m;

bool check(ll mid){
	ll tickets = n*m;
	
	for(int i = 1; i <= n; i++){
		ld tmp = mid;
		tickets -= min(m, (ll)ceil(tmp/courses[i].first));
		tmp -= min(m, (ll)ceil(tmp/courses[i].first)) * courses[i].first;

		if(tmp > 0)
			tickets -= (ll)ceil(tmp/courses[i].second);
		
		if(tickets < 0) return false;
	}
	
	return true;
}

ll BS(){

	ll l = 1, r = (m * 1e9), mid;
	
	while(l < r){
		mid = (l+r)/2;
		if(check(mid)) l = mid + 1;
		else r = mid;
	}
	
	if(!check(l)) l--;
	return l;
}

int main(){
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	cin >> n >> m;
	for(int i = 1; i <= n; i++)
		cin >> courses[i].first;
	for(int i = 1; i <= n; i++){
		cin >> courses[i].second;
		courses[i].first = max(courses[i].first, courses[i].second);
	}
	
	cout << BS() << "\n";

}
#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...