結果
問題 |
No.2244 Integer Complete
|
ユーザー |
![]() |
提出日時 | 2025-06-12 14:19:52 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 1,915 bytes |
コンパイル時間 | 271 ms |
コンパイル使用メモリ | 82,372 KB |
実行使用メモリ | 93,556 KB |
最終ジャッジ日時 | 2025-06-12 14:19:57 |
合計ジャッジ時間 | 4,851 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 19 TLE * 1 -- * 40 |
ソースコード
import math def main(): import sys input = sys.stdin.read data = input().split() idx = 0 N = int(data[idx]) M = int(data[idx+1]) idx +=2 A = list(map(int, data[idx:idx+N])) idx +=N B = list(map(int, data[idx:idx+M])) A.sort() B.sort() max_A = A[-1] if N else 0 max_B = B[-1] if M else 0 max_A_sq = (max_A + 1)**2 - 1 max_B_sq = (max_B + 1)**2 - 1 min_A_sq = A[0]**2 if N else 0 min_B_sq = B[0]**2 if M else 0 def is_in_A(x): low, high = 0, N-1 while low <= high: mid = (low + high) // 2 a = A[mid] a_sq = a * a next_sq = (a + 1) * (a + 1) if a_sq <= x < next_sq: return True elif x < a_sq: high = mid -1 else: low = mid +1 return False def is_in_B(y): low, high = 0, M-1 while low <= high: mid = (low + high) // 2 b = B[mid] b_sq = b * b next_sq = (b + 1) * (b + 1) if b_sq <= y < next_sq: return True elif y < b_sq: high = mid -1 else: low = mid +1 return False k = 1 while True: divisors = set() for i in range(1, int(math.isqrt(k)) +1): if k % i == 0: divisors.add(i) divisors.add(k//i) found = False for x in divisors: if x < min_A_sq or x > max_A_sq: continue y = k // x if y < min_B_sq or y > max_B_sq: continue if is_in_A(x) and is_in_B(y): found = True break if not found: print(k) return k +=1 if __name__ == "__main__": main()