結果
問題 |
No.2244 Integer Complete
|
ユーザー |
![]() |
提出日時 | 2025-03-31 17:33:50 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 1,903 bytes |
コンパイル時間 | 150 ms |
コンパイル使用メモリ | 82,908 KB |
実行使用メモリ | 72,512 KB |
最終ジャッジ日時 | 2025-03-31 17:34:26 |
合計ジャッジ時間 | 5,476 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 19 TLE * 1 -- * 40 |
ソースコード
import math def main(): import sys input = sys.stdin.read data = input().split() idx = 0 N, M = int(data[idx]), int(data[idx+1]) idx +=2 A = list(map(int, data[idx:idx+N])) idx +=N B = list(map(int, data[idx:idx+M])) def check_a(x): low = 0 high = len(A) - 1 best = -1 while low <= high: mid = (low + high) // 2 a = A[mid] lower = a * a if lower <= x: best = mid low = mid + 1 else: high = mid - 1 if best == -1: return False a = A[best] upper = (a + 1) * (a + 1) - 1 return x <= upper def check_b(y): low = 0 high = len(B) - 1 best = -1 while low <= high: mid = (low + high) // 2 b = B[mid] lower = b * b if lower <= y: best = mid low = mid + 1 else: high = mid - 1 if best == -1: return False b = B[best] upper = (b + 1) * (b + 1) - 1 return y <= upper k = 1 while True: found = False max_d = int(math.isqrt(k)) divisors = set() for d in range(1, max_d + 1): if k % d == 0: divisors.add(d) divisors.add(k // d) for d in divisors: a_ok = check_a(d) if a_ok: y = k // d if check_b(y): found = True break b_ok = check_b(d) if b_ok: x = k // d if check_a(x): found = True break if not found: print(k) return k += 1 if __name__ == "__main__": main()