結果

問題 No.3531 Erase Pair
コンテスト
ユーザー K2
提出日時 2026-05-04 22:52:42
言語 PyPy3
(7.3.17)
コンパイル:
pypy3 -mpy_compile _filename_
実行:
pypy3 _filename_
結果
WA  
実行時間 -
コード長 2,094 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 202 ms
コンパイル使用メモリ 85,200 KB
実行使用メモリ 82,940 KB
最終ジャッジ日時 2026-05-04 22:52:57
合計ジャッジ時間 14,284 ms
ジャッジサーバーID
(参考情報)
judge1_0 / judge3_1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1
other WA * 50
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

# 0は操作で消すことができない
# もし0が2つ以上あるなら明らかにだめ

# 正の数だけなら、大きいほうから消すことで長さN%2を達成可能
# 負の数でも同様
# よって、0が1つもないなら明らかにOK(最後に正の数と負の数が高々1つ残って、どっちもあるならそれらは消せる)

# 0が1つだけなとき
# 正数/負数の個数をそれぞれn, mとしよう
# N % 2 == 0 のとき: 0となにか1つが残っちゃうのでだめ
# n % 2 == m % 2 == 0 のとき: どっちも消えるのでOK
# 残るは n % 2 == m % 2 == 1
# 最後に足して0になるペアが残らなければいい

# いったんここを適当に書いてみる、ペナないし(なんかごめんなさい...)
# え、全WAになるほど間違ってます?
# **ペナがないので**assertかけてチェック!!
# テストケースが強かった...
# あー、-8 -4 -4 0 4 4 4 みたいなだめなのもぜんぜんあるね
# てきとー


def solve():
    N = int(input())
    A = list(map(int, input().split()))

    M = [a for a in A if a < 0]
    P = [a for a in A if a > 0]
    n = len(M)
    m = len(P)
    if N - n - m >= 2:
        print("No")
    elif N - n - m == 0:
        print("Yes")
    elif N % 2 == 0:
        print("No")
    elif n % 2 == m % 2 == 0:
        print("Yes")
    else:
        M.sort(reverse=True)
        P.sort()
        if -M[0] != P[0]:
            print("Yes")
        else:
            ok = False
            for i in range(n):
                if M[i] == M[0]:
                    continue
                left = i
                right = n - left - 1
                if left <= right:
                    ok = True
                    break
            for i in range(m):
                if P[i] == P[0]:
                    continue
                left = i
                right = m - left - 1
                if left <= right:
                    ok = True
                    break
            print("Yes" if ok else "No")


T = int(input())
for _ in range(T):
    solve()
0