結果
| 問題 |
No.2244 Integer Complete
|
| コンテスト | |
| ユーザー |
lam6er
|
| 提出日時 | 2025-03-20 20:20:14 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 2,565 bytes |
| コンパイル時間 | 170 ms |
| コンパイル使用メモリ | 82,456 KB |
| 実行使用メモリ | 97,804 KB |
| 最終ジャッジ日時 | 2025-03-20 20:21:18 |
| 合計ジャッジ時間 | 5,044 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 19 TLE * 1 -- * 40 |
ソースコード
import math
def main():
import sys
input = sys.stdin.read().split()
ptr = 0
N = int(input[ptr])
ptr +=1
M = int(input[ptr])
ptr +=1
A = list(map(int, input[ptr:ptr+N]))
ptr += N
B = list(map(int, input[ptr:ptr+M]))
ptr += M
def generate_intervals(arr):
intervals = []
for num in arr:
start = num * num
end = (num +1) **2
intervals.append( (start, end) )
return intervals
def merge_intervals(intervals):
if not intervals:
return []
sorted_intervals = sorted(intervals, key=lambda x: x[0])
merged = [ list(sorted_intervals[0]) ]
for current in sorted_intervals[1:]:
last = merged[-1]
if current[0] <= last[1]:
last[1] = max(last[1], current[1])
else:
merged.append( list(current) )
return [ (interval[0], interval[1]) for interval in merged ]
x_intervals = generate_intervals(A)
y_intervals = generate_intervals(B)
merged_x = merge_intervals(x_intervals)
merged_y = merge_intervals(y_intervals)
starts_x = [ interval[0] for interval in merged_x ]
ends_x = [ interval[1] for interval in merged_x ]
starts_y = [ interval[0] for interval in merged_y ]
ends_y = [ interval[1] for interval in merged_y ]
def is_in(num, starts, ends):
left = 0
right = len(starts) -1
res = -1
while left <= right:
mid = (left + right) //2
if starts[mid] <= num:
res = mid
left = mid +1
else:
right = mid -1
if res == -1:
return False
return ends[res] > num
def get_divisors(s):
divisors = set()
for i in range(1, int(math.isqrt(s)) +1):
if s % i ==0:
divisors.add(i)
divisors.add(s//i)
return divisors
s = 1
while True:
divisors = get_divisors(s)
found = False
for d in divisors:
# Check d is x, s/d is y
if is_in(d, starts_x, ends_x) and is_in(s // d, starts_y, ends_y):
found = True
break
# Check s/d is x, d is y
if is_in(s // d, starts_x, ends_x) and is_in(d, starts_y, ends_y):
found = True
break
if not found:
print(s)
return
s +=1
if __name__ == '__main__':
main()
lam6er