結果
問題 | No.2672 Subset Xor Sum |
ユーザー |
![]() |
提出日時 | 2024-03-15 23:27:39 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,866 bytes |
コンパイル時間 | 3,890 ms |
コンパイル使用メモリ | 258,152 KB |
実行使用メモリ | 13,648 KB |
最終ジャッジ日時 | 2024-09-30 03:01:47 |
合計ジャッジ時間 | 8,108 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 10 WA * 14 TLE * 1 -- * 41 |
ソースコード
//#pragma GCC optimize("Ofast") //#pragma GCC optimize "O3,omit-frame-pointer,inline" #include <iostream> // cout, endl, cin #include <string> // string, to_string, stoi #include <vector> // vector #include <algorithm> // min, max, swap, sort, reverse, lower_bound, upper_bound #include <utility> // pair, make_pair #include <tuple> // tuple, make_tuple #include <cstdint> // int64_t, int*_t #include <cstdio> // printf #include <map> // map #include <queue> // queue, priority_queue #include <set> // set #include <stack> // stack #include <deque> // deque #include <unordered_map> // unordered_map #include <unordered_set> // unordered_set #include <bitset> // bitset #include <cctype> // isupper, islower, isdigit, toupper, tolower #include <iomanip>//fixed,setprecision #include <limits.h>//INT_MAX #include <math.h>//M_PI #include <random> #include <regex> // 正規表現 #include <time.h> #include <fstream> #include <array> #include <bit> #include <chrono> #include <ranges> #include <span> #include <cmath> #include <cstdint> #include <complex>//複素数 //#include <bits/stdc++.h> using namespace std; #include <atcoder/all> using namespace atcoder; //using mint = modint1000000007; //using mint = modint998244353; // using mint=modint; #define ll long long #define rep(i, n) for (ll i = 0; i < (ll)(n); i++) //const int dx[8]={1,0,-1,0,1,1,-1,-1}; //const int dy[8]={0,1,0,-1,1,-1,1,-1}; int dx[4]={1,0,-1,0}; int dy[4]={0,1,0,-1}; bool canFormMax(const vector<int>& arr, int maxVal, vector<int>& used, int startIndex, int currentSum) { if (currentSum == maxVal) return true; if (currentSum > maxVal || startIndex >= arr.size()) return false; for (int i = startIndex; i < arr.size(); ++i) { used.push_back(i); if (canFormMax(arr, maxVal, used, i + 1, currentSum + arr[i])) return true; used.pop_back(); } return false; } int main() { int n; cin>>n; vector<int> a(n); set<int>st; rep(i,n){ cin>>a[i]; st.insert(i); } sort(a.begin(),a.end()); int maxVal = a[n-1]; st.erase(n-1); a.pop_back(); std::vector<int> used; if (canFormMax(a, maxVal, used, 0, 0)) { for (int i : used) { st.erase(i); } if(st.empty())cout<<"No"<<endl; else{ ll sum1=maxVal,sum2=0; for(int i:used){ cerr<<a[i]<<" "; sum1^=a[i]; } cerr<<endl; for(int i:st){ cerr<<a[i]<<" "; sum2^=a[i]; } cerr<<endl; cerr<<sum1<<" "<<sum2<<endl; if(sum1==sum2){ cout<<"Yes"<<endl; }else{ cout<<"No"<<endl; } } } else { cout<<"No"<<endl; } return 0; }