結果
| 問題 | No.3461 Min GCD |
| コンテスト | |
| ユーザー |
harurun
|
| 提出日時 | 2026-02-28 15:23:43 |
| 言語 | C++17 (gcc 15.2.0 + boost 1.89.0) |
| 結果 |
AC
|
| 実行時間 | 728 ms / 2,000 ms |
| コード長 | 2,279 bytes |
| 記録 | |
| コンパイル時間 | 11,695 ms |
| コンパイル使用メモリ | 620,288 KB |
| 実行使用メモリ | 108,928 KB |
| 最終ジャッジ日時 | 2026-02-28 15:24:02 |
| 合計ジャッジ時間 | 17,206 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge7 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 21 |
ソースコード
# pragma GCC target("avx2")
# pragma GCC optimize("O3")
# pragma GCC optimize("unroll-loops")
#ifndef ONLINE_JUDGE
#include "header.hpp"
#else
#include <bits/stdc++.h>
#include <atcoder/all>
#include <boost/multiprecision/cpp_int.hpp>
using cpp_int=boost::multiprecision::cpp_int;
#include <boost/multiprecision/cpp_dec_float.hpp>
template<unsigned size>using cpp_float=boost::multiprecision::number<boost::multiprecision::cpp_dec_float<size>>;
template<unsigned size>using cpp_double=boost::multiprecision::number<boost::multiprecision::cpp_dec_float<size,long long>>;
#endif
using namespace std;
using ll=long long;
inline void yn(bool x){if(x){cout<<"Yes"<<endl;}else{cout<<"No"<<endl;}}
#define double_out(x) fixed << setprecision(x)
template<class T> inline void erase_duplicate(vector<T>& A){sort(A.begin(),A.end());A.erase(unique(A.begin(),A.end()),A.end());}
inline ll powll(ll x,ll n){ll r=1;while(n>0){if(n&1){r*=x;};x*=x;n>>=1;};return r;}
using namespace std;
using ll=long long;
int main(){
ios::sync_with_stdio(false);
std::cin.tie(nullptr);
ll N,K;
cin>>N>>K;
vector<ll> A(N);
for(ll i=0;i<N;i++){
cin>>A[i];
}
vector<ll> B(N);
for(ll i=0;i<N;i++){
cin>>B[i];
}
vector<vector<ll>> div(N);
for(ll i=0;i<N;i++){
for(ll j=1;j*j<=A[i];j++){
if(A[i]%j==0){
div[i].push_back(j);
if(A[i]/j!=j){
div[i].push_back(A[i]/j);
}
}
}
sort(div[i].begin(),div[i].end());
}
ll ac=1;
ll wa=100001;
for(ll i=0;i<17;i++){
ll mid=(ac+wa)/2;
ll cnt=0;
for(ll j=0;j<N;j++){
ll idx=lower_bound(div[j].begin(),div[j].end(),mid)-div[j].begin();
ll tmp=1LL<<60;
for(ll k=idx;k<div[j].size();k++){
ll d=div[j][k];
if(B[j]%d==0){
tmp=0;
break;
}else{
tmp=min(tmp, d-(B[j]%d));
}
}
cnt+=tmp;
if(tmp==1LL<<60){
break;
}
}
if(cnt<=K){
ac=mid;
}else{
wa=mid;
}
}
cout<<ac<<endl;
}
harurun