結果

問題 No.3531 Erase Pair
コンテスト
ユーザー lif4635
提出日時 2026-05-04 22:08:51
言語 PyPy3
(7.3.17)
コンパイル:
pypy3 -mpy_compile _filename_
実行:
pypy3 _filename_
結果
AC  
実行時間 221 ms / 500 ms
コード長 3,528 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 193 ms
コンパイル使用メモリ 84,864 KB
実行使用メモリ 82,944 KB
最終ジャッジ日時 2026-05-04 22:09:02
合計ジャッジ時間 9,743 ms
ジャッジサーバーID
(参考情報)
judge3_1 / judge1_1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1
other AC * 50
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

# input
import sys
input = sys.stdin.readline
II = lambda : int(input())
MI = lambda : map(int, input().split())
LI = lambda : [int(a) for a in input().split()]
SI = lambda : input().rstrip()
LLI = lambda n : [[int(a) for a in input().split()] for _ in range(n)]
LSI = lambda n : [input().rstrip() for _ in range(n)]
MI_1 = lambda : map(lambda x:int(x)-1, input().split())
LI_1 = lambda : [int(a)-1 for a in input().split()]

mod = 998244353
inf = 1001001001001001001
ordalp = lambda s : ord(s)-65 if s.isupper() else ord(s)-97
ordallalp = lambda s : ord(s)-39 if s.isupper() else ord(s)-97
yes = lambda : print("Yes")
no = lambda : print("No")
yn = lambda flag : print("Yes" if flag else "No")

prinf = lambda ans : print(ans if ans < 1000001001001001001 else -1)
alplow = "abcdefghijklmnopqrstuvwxyz"
alpup = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
alpall = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
URDL = {'U':(-1,0), 'R':(0,1), 'D':(1,0), 'L':(0,-1)}
DIR_4 = [[-1,0],[0,1],[1,0],[0,-1]]
DIR_8 = [[-1,0],[-1,1],[0,1],[1,1],[1,0],[1,-1],[0,-1],[-1,-1]]
DIR_BISHOP = [[-1,1],[1,1],[1,-1],[-1,-1]]
prime60 = [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59]
sys.set_int_max_str_digits(0)
# sys.setrecursionlimit(10**6)
# import pypyjit
# pypyjit.set_param('max_unroll_recursion=-1')

from collections import defaultdict,deque
from heapq import heappop,heappush
from bisect import bisect_left,bisect_right
DD = defaultdict
BSL = bisect_left
BSR = bisect_right



def solve():
    n = II()
    a = LI()
    
    c0 = 0
    po = []
    ne = []
    for x in a:
        if x > 0:
            po.append(x)
        elif x < 0:
            ne.append(x)
        else:
            c0 += 1
    
    """
    po, ne は 2 つずつ消せる
    """
    if c0 >= 2:
        no()
        return
    
    f1 = len(po) % 2
    f2 = len(ne) % 2
    if f1 == 0 and f2 == 0:
        yes()
        return
    if f1 ^ f2 == 1:
        if c0 == 0:
            yes()
        elif c0 == 1:
            no()
        return
    
    """
    両方 1 のとき
    条件は?
    po と ne を適当にマッチングさせる
    その条件で dag になる
    """
    
    if c0 == 0:
        yes()
        return
    
    po.sort()
    ne.sort()
    
    x = po[0]
    if -x != ne[-1]:
        yes()
        return
    
    # assert False
    
    """
    ある x の等差数列になっている
    条件は
    自分の下のある要素が 0 になることができること
    4 倍まであれば ok
    """
    c = [0] * 7
    c[0] += c0
    mi, ma = 0, 0
    for y in po:
        if y % x != 0:
            yes()
            return
        if y // x >= 4:
            yes()
            return
        c[y//x] += 1
        ma = max(ma, y//x)
    for y in ne:
        if y % x != 0:
            yes()
            return
        if y // x <= -4:
            yes()
            return
        c[y//x] += 1
        mi = min(mi, y//x)
    
    
    # assert False
    
    """
    -3 ~ 3 までになる
    mi ~ ma
    (-1 ~ -3)
    ()
    """
    for i in range(mi, ma + 1):
        if c[i] == 0:
            yes()
            return
    
    if mi == -1 and ma == 1:
        no()
        return
    
    if c[3] > c[2] % 2:
        yes()
        return
    if c[3] + c[2] > c[1]:
        yes()
        return
    if c[-3] > c[-2] % 2:
        yes()
        return
    
    if c[-3] + c[-2] > c[-1]:
        yes()
        return
    
    """
    すべて正
    """
    no()
    return
    
    

t = II()
for i in range(t):
    solve()
0