結果

問題 No.1361 [Zelkova 4th Tune *] QUADRUPLE-SEQUENCEの詩
ユーザー mkawa2mkawa2
提出日時 2021-01-23 11:36:44
言語 PyPy3
(7.3.15)
結果
TLE  
実行時間 -
コード長 4,349 bytes
コンパイル時間 287 ms
コンパイル使用メモリ 87,104 KB
実行使用メモリ 154,264 KB
最終ジャッジ日時 2023-08-28 21:37:31
合計ジャッジ時間 27,312 ms
ジャッジサーバーID
(参考情報)
judge14 / judge15
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 74 ms
71,644 KB
testcase_01 AC 75 ms
71,340 KB
testcase_02 AC 78 ms
75,412 KB
testcase_03 AC 78 ms
75,532 KB
testcase_04 AC 76 ms
71,576 KB
testcase_05 AC 76 ms
71,520 KB
testcase_06 AC 73 ms
71,636 KB
testcase_07 AC 73 ms
71,264 KB
testcase_08 AC 106 ms
76,828 KB
testcase_09 AC 99 ms
76,416 KB
testcase_10 AC 104 ms
76,932 KB
testcase_11 AC 100 ms
76,144 KB
testcase_12 AC 104 ms
76,992 KB
testcase_13 AC 102 ms
76,676 KB
testcase_14 AC 97 ms
75,792 KB
testcase_15 AC 114 ms
77,788 KB
testcase_16 AC 107 ms
76,956 KB
testcase_17 AC 106 ms
76,848 KB
testcase_18 AC 180 ms
81,436 KB
testcase_19 AC 150 ms
79,036 KB
testcase_20 AC 199 ms
81,628 KB
testcase_21 AC 150 ms
80,496 KB
testcase_22 AC 166 ms
80,036 KB
testcase_23 AC 179 ms
80,852 KB
testcase_24 AC 186 ms
81,296 KB
testcase_25 AC 180 ms
80,632 KB
testcase_26 AC 185 ms
81,320 KB
testcase_27 AC 170 ms
80,096 KB
testcase_28 AC 1,906 ms
122,168 KB
testcase_29 AC 1,679 ms
112,832 KB
testcase_30 AC 1,185 ms
110,204 KB
testcase_31 AC 1,580 ms
130,820 KB
testcase_32 TLE -
testcase_33 AC 1,074 ms
113,640 KB
testcase_34 AC 1,929 ms
134,788 KB
testcase_35 TLE -
testcase_36 TLE -
testcase_37 -- -
testcase_38 -- -
testcase_39 -- -
testcase_40 -- -
testcase_41 -- -
testcase_42 -- -
testcase_43 -- -
testcase_44 -- -
testcase_45 -- -
testcase_46 -- -
testcase_47 -- -
testcase_48 -- -
testcase_49 -- -
testcase_50 -- -
testcase_51 -- -
testcase_52 -- -
testcase_53 -- -
testcase_54 -- -
testcase_55 -- -
testcase_56 -- -
testcase_57 -- -
testcase_58 -- -
testcase_59 -- -
testcase_60 -- -
testcase_61 -- -
testcase_62 -- -
testcase_63 -- -
testcase_64 -- -
testcase_65 -- -
testcase_66 -- -
testcase_67 -- -
testcase_68 -- -
testcase_69 -- -
testcase_70 -- -
testcase_71 -- -
testcase_72 -- -
testcase_73 -- -
権限があれば一括ダウンロードができます

ソースコード

diff #

import sys

sys.setrecursionlimit(10**6)
int1 = lambda x: int(x)-1
p2D = lambda x: print(*x, sep="\n")
def II(): return int(sys.stdin.buffer.readline())
def MI(): return map(int, sys.stdin.buffer.readline().split())
def MI1(): return map(int1, sys.stdin.buffer.readline().split())
def LI(): return list(map(int, sys.stdin.buffer.readline().split()))
def LI1(): return list(map(int1, sys.stdin.buffer.readline().split()))
def LLI(rows_number): return [LI() for _ in range(rows_number)]
def BI(): return sys.stdin.buffer.readline().rstrip()
def SI(): return sys.stdin.buffer.readline().rstrip().decode()
dij = [(0, 1), (-1, 0), (0, -1), (1, 0)]
inf = 10**19
# md = 998244353
md = 10**9+7

def mulall(aa, bb):
    pos = []
    neg = []
    zero = 0
    for i, a in enumerate(aa):
        for j, b in enumerate(bb):
            if a*b == 0: zero += 1
            elif a*b > 0: pos.append((a*b, i, j))
            else: neg.append((a*b, i, j))
    pos.sort(key=lambda x: x[0])
    neg.sort(key=lambda x: x[0])
    return pos, neg, zero

def ok1(m):
    cnt = 0
    if abp and cdn:
        idx = len(cdn)-1
        for x, i, j in abp[::-1]:
            while idx >= 0 and cdn[idx][0]*x >= m:
                idx -= 1
            if idx < 0: break
            cnt += idx+1
    if abn and cdp:
        idx = len(abn)-1
        for x, i, j in cdp[::-1]:
            while idx >= 0 and abn[idx][0]*x >= m:
                idx -= 1
            if idx < 0: break
            cnt += idx+1
    return cnt < s

def ok2(m):
    cnt = 0
    if abp and cdp:
        idx = len(cdp)-1
        for x, i, j in abp:
            while idx >= 0 and cdp[idx][0]*x >= m:
                idx -= 1
            if idx < 0: break
            cnt += idx+1
    if abn and cdn:
        idx = 0
        for x, i, j in abn[::-1]:
            while idx < len(cdn) and cdn[idx][0]*x >= m:
                idx += 1
            if idx >= len(cdn): break
            cnt += len(cdn)-idx
    return cnt < s

def findindex1(l):
    if abp and cdn:
        idx = 0
        for x, i, j in abp:
            while idx < len(cdn) and x*cdn[idx][0] < l:
                idx += 1
            if idx == len(cdn): break
            if x*cdn[idx][0] == l:
                print(aa[i], bb[j], cc[cdn[idx][1]], dd[cdn[idx][2]])
                return
    if abn and cdp:
        idx = 0
        for x, i, j in cdp:
            while idx < len(abn) and x*abn[idx][0] < l:
                idx += 1
            if idx == len(abn): break
            if x*abn[idx][0] == l:
                print(aa[abn[idx][1]], bb[abn[idx][2]], cc[i], dd[j])
                return

def findindex2(l):
    if abp and cdp:
        idx = len(cdp)-1
        for x, i, j in abp:
            while idx >= 0 and x*cdp[idx][0] > l:
                idx -= 1
            if idx < 0: break
            if x*cdp[idx][0] == l:
                print(aa[i], bb[j], cc[cdp[idx][1]], dd[cdp[idx][2]])
                return
    idx = len(cdn)-1
    for x, i, j in abn:
        while idx >= 0 and x*cdn[idx][0] < l:
            idx -= 1
        if idx < 0: break
        if x*cdn[idx][0] == l:
            print(aa[i], bb[j], cc[cdn[idx][1]], dd[cdn[idx][2]])
            return

def find0(aa):
    for i, a in enumerate(aa):
        if a == 0: return i
    return -1

an, bn, cn, dn, s = MI()
aa = LI()
bb = LI()
cc = LI()
dd = LI()

abp, abn, abz = mulall(aa, bb)
cdp, cdn, cdz = mulall(cc, dd)
# print(abp, abn, cdp, cdn)

if len(abp)*len(cdn)+len(abn)*len(cdp) >= s:
    l = -10**18
    r = 0
    while l+1 < r:
        m = (l+r)//2
        if ok1(m): l = m
        else: r = m
    print(l)
    findindex1(l)

elif len(abp)*len(cdn)+len(abn)*len(cdp)+abz*cn*dn+cdz*an*bn >= s:
    print(0)
    if abz:
        i = find0(aa)
        if i != -1:
            print(0, bb[0], cc[0], dd[0])
            exit()
        i = find0(bb)
        if i != -1:
            print(aa[0], 0, cc[0], dd[0])
            exit()
    else:
        i = find0(cc)
        if i != -1:
            print(aa[0], bb[0], 0, dd[0])
            exit()
        i = find0(dd)
        if i != -1:
            print(aa[0], bb[0], cc[0], 0)
            exit()

else:
    s -= len(abp)*len(cdn)+len(abn)*len(cdp)+abz*cn*dn+cdz*an*bn
    l = 0
    r = 10**18
    while l+1 < r:
        m = (l+r)//2
        if ok2(m): l = m
        else: r = m
    print(l)
    findindex2(l)
0