結果
| 問題 |
No.2244 Integer Complete
|
| コンテスト | |
| ユーザー |
shobonvip
|
| 提出日時 | 2023-03-08 05:00:18 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 60 ms / 2,000 ms |
| コード長 | 1,367 bytes |
| コンパイル時間 | 4,543 ms |
| コンパイル使用メモリ | 255,764 KB |
| 最終ジャッジ日時 | 2025-02-11 06:41:45 |
|
ジャッジサーバーID (参考情報) |
judge2 / judge6 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 60 |
ソースコード
#include<bits/stdc++.h>
#include<atcoder/all>
using namespace std;
using namespace atcoder;
typedef modint998244353 mint;
typedef long long ll;
// makediv
vector<ll> makediv(ll n){
vector<ll> ld, ud;
for (ll i=1; i*i<=n; i++){
if (n%i == 0){
ld.push_back(i);
if (i != n/i){
ud.push_back(n/i);
}
}
}
reverse(ud.begin(), ud.end());
ld.insert(ld.end(), ud.begin(), ud.end());
return ld;
}
// -----
int main(){
int n,m; cin >> n >> m;
vector<ll> a(n);
vector<ll> a2(n);
vector<ll> b(m);
vector<ll> b2(m);
for (int i=0; i<n; i++){
cin >> a[i];
a2[i] = a[i] * a[i];
}
for (int i=0; i<m; i++){
cin >> b[i];
b2[i] = b[i] * b[i];
}
if (a[0] != 1 || b[0] != 1){
cout << 1 << endl;
return 0;
}
vector<bool> c(40000);
for (int i=0; i<n; i++){
c[a[i]] = true;
}
for (int i=0; i<m; i++){
c[b[i]] = true;
}
ll v = 0;
for (int i=1; i<40000; i++){
if (!c[i]){
v = i * i;
break;
}
}
ll k = v;
while (true){
bool mode = false;
for (ll i: makediv(k)){
ll j = k / i;
int x = upper_bound(a2.begin(),a2.end(),i) - a2.begin() - 1;
int y = upper_bound(b2.begin(),b2.end(),j) - b2.begin() - 1;
if (x < 0 || y < 0) continue;
if ((a[x] + 1) * (a[x] + 1) <= i) continue;
if ((b[y] + 1) * (b[y] + 1) <= j) continue;
mode = true;
break;
}
if (!mode) break;
k++;
}
cout << k << endl;
}
shobonvip