Submission #173528

#TimeUsernameProblemLanguageResultExecution timeMemory
173528srvltBootfall (IZhO17_bootfall)C++14
65 / 100
777 ms760 KiB
//#pragma GCC optimize("Ofast") //#pragma GCC target("avx,avx2,fma") #include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> #define ordered_set tree <pair <int, int>, null_type, less <pair <int, int> >, rb_tree_tag, tree_order_statistics_node_update> using namespace __gnu_pbds; #define ll long long #define db double #define pb push_back #define ppb pop_back #define fi first #define se second #define mp make_pair #define size(x) (int)(x).size() #define all(x) (x).begin(), (x).end() #define low_b lower_bound #define endl "\n" //#define int long long using namespace std; void dout() { cerr << endl; } template <typename Head, typename... Tail> void dout(Head H, Tail... T) { cerr << H << ' '; dout(T...); } //mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); typedef pair <int, int> pii; const int N = 353, M = 122501; int n, a[N]; bitset <M> sack, res, ans; void solve(int tc) { // check for (int i = 0; i < n; j++) cin >> n; int total = 0; sack[0] = 1; for (int i = 1; i <= n; i++) { cin >> a[i]; total += a[i]; sack |= (sack << a[i]); } if ((total & 1) || !sack[total >> 1]) { cout << 0; return; } int cur; ans.set(); for (int i = 1; i <= n; i++) { sack.reset(); res.reset(); sack[0] = 1; for (int j = 1; j <= n; j++) { if (i == j) { continue; } sack |= (sack << a[j]); } cur = total - a[i]; for (int j = cur & 1; j <= cur; j += 2) { if (sack[cur + j >> 1] || sack[cur - j >> 1]) { res[j] = 1; } } ans &= res; } cout << ans.count() << endl; for (int i = 0; i < M; i++) { if (ans[i]) { cout << i << " "; } } } signed main() { ios_base::sync_with_stdio(false); cin.tie(NULL); // freopen("input.txt", "r", stdin); // freopen("output.txt", "w", stdout); int tc = 1; // cin >> tc; for (int i = 0; i < tc; i++) { solve(i); // cleanup(); } }

Compilation message (stderr)

bootfall.cpp: In function 'void solve(int)':
bootfall.cpp:71:26: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
             if (sack[cur + j >> 1] || sack[cur - j >> 1]) {
                      ~~~~^~~
bootfall.cpp:71:48: warning: suggest parentheses around '-' inside '>>' [-Wparentheses]
             if (sack[cur + j >> 1] || sack[cur - j >> 1]) {
                                            ~~~~^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...