Submission #593540

#TimeUsernameProblemLanguageResultExecution timeMemory
593540welleythSelf Study (JOI22_ho_t2)C++17
100 / 100
270 ms13880 KiB
#include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> using namespace __gnu_pbds; using namespace std; #define int long long #define mp make_pair #define pb push_back #pragma GCC optimize("Ofast") #pragma GCC optimize("unroll-loops") #pragma GCC target("avx2") constexpr int INF = (int)2e9; constexpr int N = (int)4e5 + 111; constexpr int md = (int)1e9+7; constexpr int mdPower = (int)1e9+7 - 1; constexpr double eps = 1e-7; typedef __int128 _uint; typedef long long ll; mt19937_64 rnd(time(nullptr)); void add(int& a,int b){ a += b; if(a >= md) a -= md; } void sub(int& a,int b){ a -= b; while(a < 0) a += md; } void add(__int128& a,int b){ a += b; } void sub(__int128& a,int b){ a -= b; } int bpow(int a,int b){ if(b == 0) return 1; if(b % 2 == 0){ int t = bpow(a,b>>1); return 1ll*t*t%md; } return 1ll * a*bpow(a,b-1) % md; } int inv(int a){ return bpow(a,md-2); } //int fac[N],invfac[N]; // //void init(){ // fac[0] = 1; // for(int i = 1; i < N; i++){ // fac[i] = (fac[i-1] * i) % md; // } // invfac[N-1] = inv(fac[N-1]); // for(int i = N-2; i >= 0; i--){ // invfac[i] = (invfac[i+1] * (i+1))%md; // } // return; //} // //int C(int n,int k){ // if(k > n) // return 0; // return fac[n] * invfac[k] % md * invfac[n-k] % md; //} // //int A(int n,int k){ // if(k > n) // return 0; // return fac[n] * invfac[n-k] % md; // int n,m; int a[N],b[N]; int cur[N]; bool f(int x){ int free = n*m; for(int i = 0; i < n; i++){ cur[i] = 0; } for(int i = 0; i < n; i++){ if(a[i] > b[i]){ int t = min(m,(x + a[i] - 1)/a[i]); free -= t; cur[i] += t * a[i]; } } for(int i = 0; i < n; i++){ if(cur[i] >= x) continue; int t = min(free,((x-cur[i]) + b[i] - 1) / b[i]); free -= t; cur[i] += t * b[i]; if(cur[i] < x) return false; } return true; } void solve(){ cin >> n >> m; for(int i = 0; i < n; i++){ cin >> a[i]; } for(int i = 0; i < n; i++){ cin >> b[i]; } int l = 0, r = (int)2e18; while(r - l > 1){ int mid = (l+r)>>1; if(f(mid)) l = mid; else r = mid; } cout << l << "\n"; return; } signed main(){ ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr); int tests = 1; // cin >> tests; for(int test = 1; test <= tests; test++){ // cerr << "test = " << test << "\n"; 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...