結果

問題 No.2244 Integer Complete
ユーザー gew1fw
提出日時 2025-06-12 19:14:27
言語 PyPy3
(7.3.15)
結果
TLE  
実行時間 -
コード長 1,635 bytes
コンパイル時間 233 ms
コンパイル使用メモリ 82,372 KB
実行使用メモリ 83,012 KB
最終ジャッジ日時 2025-06-12 19:14:47
合計ジャッジ時間 5,802 ms
ジャッジサーバーID
(参考情報)
judge5 / judge4
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 19 TLE * 1 -- * 40
権限があれば一括ダウンロードができます

ソースコード

diff #

import math

def merge_intervals(cards):
    intervals = []
    for a in cards:
        start = a * a
        end = (a + 1) * (a + 1) - 1
        intervals.append((start, end))
    if not intervals:
        return []
    intervals.sort()
    merged = [intervals[0]]
    for current in intervals[1:]:
        last = merged[-1]
        if current[0] <= last[1] + 1:
            new_start = last[0]
            new_end = max(last[1], current[1])
            merged[-1] = (new_start, new_end)
        else:
            merged.append(current)
    return merged

def is_in_intervals(x, intervals):
    left = 0
    right = len(intervals) - 1
    while left <= right:
        mid = (left + right) // 2
        s, e = intervals[mid]
        if s <= x <= e:
            return True
        elif x < s:
            right = mid - 1
        else:
            left = mid + 1
    return False

def is_possible(t, s_intervals, b_intervals):
    divisors = set()
    for i in range(1, int(math.isqrt(t)) + 1):
        if t % i == 0:
            divisors.add(i)
            divisors.add(t // i)
    for x in divisors:
        if is_in_intervals(x, s_intervals):
            y = t // x
            if is_in_intervals(y, b_intervals):
                return True
    return False

n, m = map(int, input().split())
a = list(map(int, input().split()))
b = list(map(int, input().split()))

s_intervals = merge_intervals(a)
b_intervals = merge_intervals(b)

if is_possible(1, s_intervals, b_intervals):
    t = 2
    while True:
        if not is_possible(t, s_intervals, b_intervals):
            print(t)
            break
        t += 1
else:
    print(1)
0