結果

問題 No.1597 Matrix Sort
ユーザー taiga0629kyoprotaiga0629kyopro
提出日時 2021-07-09 23:43:34
言語 PyPy3
(7.3.15)
結果
TLE  
(最新)
AC  
(最初)
実行時間 -
コード長 1,239 bytes
コンパイル時間 244 ms
コンパイル使用メモリ 81,920 KB
実行使用メモリ 103,764 KB
最終ジャッジ日時 2024-07-01 18:38:26
合計ジャッジ時間 26,451 ms
ジャッジサーバーID
(参考情報)
judge1 / judge3
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 40 ms
52,480 KB
testcase_01 AC 42 ms
52,480 KB
testcase_02 AC 45 ms
52,352 KB
testcase_03 AC 203 ms
100,056 KB
testcase_04 TLE -
testcase_05 TLE -
testcase_06 TLE -
testcase_07 TLE -
testcase_08 AC 959 ms
100,224 KB
testcase_09 AC 1,001 ms
100,224 KB
testcase_10 AC 165 ms
102,528 KB
testcase_11 AC 168 ms
100,480 KB
testcase_12 AC 1,035 ms
103,504 KB
testcase_13 AC 1,334 ms
103,764 KB
testcase_14 TLE -
testcase_15 AC 857 ms
103,296 KB
testcase_16 AC 1,284 ms
103,552 KB
testcase_17 AC 1,388 ms
100,608 KB
testcase_18 AC 1,473 ms
101,248 KB
testcase_19 AC 1,440 ms
100,668 KB
testcase_20 AC 1,427 ms
100,352 KB
testcase_21 AC 1,413 ms
100,992 KB
testcase_22 AC 1,379 ms
103,456 KB
testcase_23 AC 1,027 ms
103,168 KB
testcase_24 AC 136 ms
100,960 KB
testcase_25 AC 91 ms
100,352 KB
testcase_26 AC 40 ms
51,840 KB
testcase_27 AC 40 ms
51,968 KB
testcase_28 AC 40 ms
51,712 KB
testcase_29 AC 50 ms
59,904 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

n,k,p=map(int,input().split())
a=list(map(int,input().split()))
b=list(map(int,input().split()))
a.sort()
b.sort()

####二分探索###################################

#配列は昇順にソートずみ
def bilower(a,x):
    # a[i]<=x となる最大のiを返す ない時は-1
    if len(a)==0:return -1
    mi=0
    ma=len(a)-1
    if a[0]>x:return -1
    if a[ma]<=x:return ma
    while ma-mi>1:
        mid=(ma+mi)//2
        if a[mid]<=x:mi=mid
        else:ma=mid
    return mi

def bihigher(a,x):
    # a[i]>=x となる最小のiを返す ない時は len(a)
    if len(a)==0:return 0
    mi=0
    ma=len(a)-1
    if a[ma]<x:return ma+1
    if a[0]>=x:return 0
    while ma-mi>1:
        mid=(ma+mi)//2
        if a[mid]>=x:ma=mid
        else:mi=mid
    return ma

def birange(a,l,r):
    #l<=a[i]<=r となるiの個数を返す
    left=bihigher(a,l)
    right=bilower(a,r)
    return right-left+1

################################################





def f(x):
    res=0
    for i in range(n):
        res+=birange(b,-a[i],x-a[i])
        res+=birange(b,p-a[i],x+p-a[i])
    return res

if f(0)>=k:
    print(0)
    exit()

ng=0
ok=p-1
while ok-ng>1:
    mid=(ok+ng)//2
    if f(mid)>=k:ok=mid
    else:ng=mid

print(ok)



0