結果

問題 No.3372 Suitable Constraint
コンテスト
ユーザー titia
提出日時 2025-11-21 21:45:23
言語 PyPy3
(7.3.15)
結果
RE  
実行時間 -
コード長 1,586 bytes
コンパイル時間 361 ms
コンパイル使用メモリ 82,064 KB
実行使用メモリ 114,628 KB
最終ジャッジ日時 2025-11-21 21:45:34
合計ジャッジ時間 5,353 ms
ジャッジサーバーID
(参考情報)
judge3 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1
other AC * 13 RE * 6
権限があれば一括ダウンロードができます

ソースコード

diff #

import sys
input = sys.stdin.readline

def find(x):
    while Group[x] != x:
        x=Group[x]
    return x

def Union(x,y):
    if find(x) != find(y):
        if Nodes[find(x)] < Nodes[find(y)]:
            
            Nodes[find(y)] += Nodes[find(x)]
            Nodes[find(x)] = 0
            Group[find(x)] = find(y)
            
        else:
            Nodes[find(x)] += Nodes[find(y)]
            Nodes[find(y)] = 0
            Group[find(y)] = find(x)

T=int(input())

for tests in range(T):
    N=int(input())
    A=list(map(int,input().split()))

    A.sort()

    X=[]
    Y=[]
    Z=[]

    for a in A:
        if a>0:
            X.append(a)
        elif a<0:
            Y.append(a)
        else:
            Z.append(a)

    if X:
        if len(X)>10:
            X=X[:2]+X[-2:]
    if Y:
        if len(Y)>10:
            Y=Y[:2]+Y[-2:]
    if Z:
        if len(Z)>10:
            Z=[0]

    A=X+Y+X

    n=len(A)

    ANS=-1<<60

    SET=set()

    for i in range(len(A)):
        for j in range(i+1,len(A)):
            X=A[i]*A[j]
            SET.add(X)

    SET=sorted(SET)

    OK=0
    NG=len(SET)

    while NG>OK+1:
        mid=(OK+NG)//2

        X=SET[mid]
        #print(X)

        Group = [i for i in range(n)] # グループ分け
        Nodes = [1]*(n) # 各グループのノードの数

        for k in range(len(A)):
            for l in range(k+1,len(A)):
                if A[k]*A[l]>=X:
                    Union(k,l)

        if Nodes[find(0)]==len(A):
            OK=mid
        else:
            NG=mid

    print(SET[OK])


    
        
0