結果

問題 No.1361 [Zelkova 4th Tune *] QUADRUPLE-SEQUENCEの詩
コンテスト
ユーザー vwxyz
提出日時 2023-12-01 01:46:30
言語 PyPy3
(7.3.15)
結果
WA  
実行時間 -
コード長 2,657 bytes
記録
コンパイル時間 435 ms
コンパイル使用メモリ 82,304 KB
実行使用メモリ 155,820 KB
最終ジャッジ日時 2024-09-26 15:03:54
合計ジャッジ時間 34,952 ms
ジャッジサーバーID
(参考情報)
judge1 / judge4
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 49 WA * 25
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

import bisect
import copy
import decimal
import fractions
import heapq
import itertools
import math
import random
import sys
import time
from collections import Counter,deque,defaultdict
from functools import lru_cache,reduce
from heapq import heappush,heappop,heapify,heappushpop,_heappop_max,_heapify_max
def _heappush_max(heap,item):
    heap.append(item)
    heapq._siftdown_max(heap, 0, len(heap)-1)
def _heappushpop_max(heap, item):
    if heap and item < heap[0]:
        item, heap[0] = heap[0], item
        heapq._siftup_max(heap, 0)
    return item
from math import gcd as GCD
read=sys.stdin.read
readline=sys.stdin.readline
readlines=sys.stdin.readlines
write=sys.stdout.write
#import pypyjit
#pypyjit.set_param('max_unroll_recursion=-1')
#sys.set_int_max_str_digits(10**9)

def Bisect_Int(ok,ng,is_ok):
    while abs(ok-ng)>1:
        mid=(ok+ng)//2
        if is_ok(mid):
            ok=mid
        else:
            ng=mid
    return ok

K,L,M,N,S=map(int,readline().split())
A=list(map(int,readline().split()))
B=list(map(int,readline().split()))
C=list(map(int,readline().split()))
D=list(map(int,readline().split()))
lst0=[]
for a in A:
    for b in B:
        lst0.append(a*b)
minus1,plus1,zero1=[],[],0
for c in C:
    for d in D:
        if c*d<0:
            minus1.append(c*d)
        elif c*d==0:
            zero1+=1
        else:
            plus1.append(c*d)
minus1.sort(reverse=True)
plus1.sort(reverse=True)
lst0.sort()
def is_ok(ans):
    cnt=0
    i=0
    for cd in minus1:
        while i<len(lst0) and lst0[i]*cd>=ans:
            i+=1
        cnt+=len(lst0)-i
    if 0<ans:
        cnt+=len(lst0)*zero1
    i=0
    for cd in plus1:
        while i<len(lst0) and lst0[i]*cd<ans:
            i+=1
        cnt+=i
    return cnt<S
inf=1<<60
ans=Bisect_Int(-inf,inf,is_ok)
if ans==0:
    for kk in range(K):
        if A[kk]==0:
            k,l,m,n=kk,0,0,0
            break
    else:
        for ll in range(L):
            if B[ll]==0:
                k,l,m,n=0,ll,0,0
                break
        else:
            for mm in range(M):
                if C[mm]==0:
                    k,l,m,n=0,0,mm,0
                    break
            else:
                for nn in range(N):
                    if D[nn]==0:
                        k,l,m,n=0,0,0,nn
else:
    dct={}
    for k in range(K):
        for l in range(L):
            dct[A[k]*B[l]]=(k,l)
    for m in range(M):
        for n in range(N):
            cd=C[m]*D[n]
            if cd and ans%cd==0 and ans//cd in dct:
                k,l=dct[ans//cd]
                break
        else:
            continue
        break
print(ans)
print(A[k],B[l],C[m],D[n])
0