結果
| 問題 |
No.1361 [Zelkova 4th Tune *] QUADRUPLE-SEQUENCEの詩
|
| コンテスト | |
| ユーザー |
gew1fw
|
| 提出日時 | 2025-06-12 21:40:46 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
RE
|
| 実行時間 | - |
| コード長 | 2,880 bytes |
| コンパイル時間 | 163 ms |
| コンパイル使用メモリ | 82,212 KB |
| 実行使用メモリ | 148,728 KB |
| 最終ジャッジ日時 | 2025-06-12 21:44:53 |
| 合計ジャッジ時間 | 10,756 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 27 RE * 1 TLE * 1 -- * 45 |
ソースコード
import bisect
def main():
import sys
input = sys.stdin.read
data = input().split()
idx = 0
K = int(data[idx])
L = int(data[idx+1])
M = int(data[idx+2])
N = int(data[idx+3])
S = int(data[idx+4])
idx +=5
A = list(map(int, data[idx:idx+K]))
idx += K
B = list(map(int, data[idx:idx+L]))
idx += L
C = list(map(int, data[idx:idx+M]))
idx += M
D = list(map(int, data[idx:idx+N]))
idx += N
# Compute AB and AB_map
AB = []
AB_map = {}
for a in A:
for b in B:
ab = a * b
if ab not in AB_map:
AB_map[ab] = (a, b)
AB.append(ab)
AB.sort()
# Compute CD and CD_map
CD = []
CD_map = {}
for c in C:
for d in D:
cd = c * d
if cd not in CD_map:
CD_map[cd] = (c, d)
CD.append(cd)
CD.sort()
cd_set = set(CD)
# Helper function to count the number of pairs (ab, cd) where ab*cd <= T.
def count_less_or_equal(T):
count = 0
for ab in AB:
if ab == 0:
if T >= 0:
count += len(CD)
else:
if ab > 0:
if T < ab * CD[-1]:
max_cd = T // ab
cnt = bisect.bisect_right(CD, max_cd)
count += cnt
else:
count += len(CD)
else:
min_cd = T / ab
idx = bisect.bisect_left(CD, min_cd)
count += len(CD) - idx
return count
# Find the minimal and maximal possible T
min_ab = min(AB)
max_ab = max(AB)
min_cd = min(CD)
max_cd = max(CD)
candidates = [
min_ab * min_cd,
min_ab * max_cd,
max_ab * min_cd,
max_ab * max_cd
]
low = min(candidates)
high = max(candidates)
# Binary search
while low < high:
mid = (low + high) // 2
cnt = count_less_or_equal(mid)
if cnt >= S:
high = mid
else:
low = mid + 1
T = low
# Now, find ab and cd such that ab * cd = T
ab_val = None
cd_val = None
for ab in AB:
if ab == 0:
if T == 0:
if 0 in cd_set:
ab_val = ab
cd_val = 0
break
else:
if T % ab != 0:
continue
target = T // ab
if target in cd_set:
ab_val = ab
cd_val = target
break
# Retrieve a and b from AB_map, c and d from CD_map
a, b = AB_map[ab_val]
c, d = CD_map[cd_val]
print(T)
print(f"{a} {b} {c} {d}")
if __name__ == "__main__":
main()
gew1fw