結果
| 問題 | No.3531 Erase Pair |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-05-02 15:08:35 |
| 言語 | C++17 (gcc 15.2.0 + boost 1.89.0) |
| 結果 |
AC
|
| 実行時間 | 56 ms / 500 ms |
| コード長 | 1,320 bytes |
| 記録 | |
| コンパイル時間 | 3,952 ms |
| コンパイル使用メモリ | 232,000 KB |
| 実行使用メモリ | 6,400 KB |
| 最終ジャッジ日時 | 2026-05-04 20:56:17 |
| 合計ジャッジ時間 | 5,458 ms |
|
ジャッジサーバーID (参考情報) |
judge2_1 / judge3_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 50 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
bool solve(){
ll N; cin >> N;
vector<ll> A(N);
for(ll i = 0; i < N; i++) cin >> A[i];
sort(A.begin(),A.end());
ll zero_cnt = 0;
vector<ll> B, C;
for(ll i = 0; i < N; i++){
if(A[i] < 0) C.push_back(A[i]);
if(A[i] == 0) zero_cnt++;
if(A[i] > 0) B.push_back(A[i]);
}
sort(B.rbegin(),B.rend()); sort(C.begin(),C.end());
if(zero_cnt == 0) return true;
if(zero_cnt >= 2) return false;
if(N % 2 == 0) return false;
if(B.size() % 2 == 0) return true;
if(B.back() != -C.back()) return true;
if((B.back() != B[B.size() / 2]) || (C.back() != C[C.size() / 2])) return true;
for(ll i = 0; i < N; i++) if(A[i] % B.back() != 0) return true;
for(auto &x : A) x /= B.back();
for(auto &x : C) x /= B.back();
for(auto &x : B) x /= B.back();
if(-4 >= C[0] || B[0] >= 4) return true;
map<ll,ll> cnt;
for(auto x : A) cnt[x]++;
if(cnt[3] >= 1 && cnt[2] % 2 == 0) return true;
if(cnt[-3] >= 1 && cnt[-2] % 2 == 0) return true;
if(cnt[3] >= 2 && cnt[2] % 2 == 1) return true;
if(cnt[-3] >= 2 && cnt[-2] % 2 == 1) return true;
return false;
}
int main(){
ll T; cin >> T;
while(T--) cout << (solve() ? "Yes" : "No") << "\n";
}