Submission #1197218

#TimeUsernameProblemLanguageResultExecution timeMemory
1197218vtnooSelf Study (JOI22_ho_t2)C++20
62 / 100
95 ms5136 KiB
#include <iostream>
#include <algorithm>
#include <vector>
#include <set>

#define pb push_back
#define snd second
#define fst first
#define forn(i,n) for(int i=0;i<n;++i)
#define forsn(i,s,n) for(int i=s; i<n; ++i)
#define all(x) x.begin(), x.end()
#define imp(x) for(auto __:x)cout<<__<<" "; cout<<endl;
#define sz(c) int((c).size())

using namespace std;

typedef long long ll;
typedef pair<ll,ll> ii;
typedef vector<ll> vi;

int main(){	
	ios_base::sync_with_stdio(false);
	cin.tie(nullptr);
	ll n,m;cin>>n>>m;
	__int128 limite=n*m;
	vi A(n), B(n);
	//ten en cuenta que solo podemos obtener A[i] si j==i;
	forn(i,n)cin>>A[i];
	forn(i,n){
		cin>>B[i]; 
		A[i]=max(A[i], B[i]);
	}
	auto can=[&](ll tar)->bool{
		__int128 clases=0;
		forn(i,n){
			__int128 cur=min((tar+A[i]-1)/A[i], m);
			clases+=cur;
			__int128 self=tar-cur*A[i];
			if(self>0)//debo estudiar fuera de clase
				clases+=(self+B[i]-1)/B[i];
			if(clases>limite)return false;
		}
		return true;
	};
	ll l=-1, r=1e18;
	while(r-l>1){
		ll m=l+(r-l)/2;
		if(can(m)){
			l=m;
		}else r=m;
	}
	cout<<l<<endl;
}	



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