Submission #173509

#TimeUsernameProblemLanguageResultExecution timeMemory
173509srvltBootfall (IZhO17_bootfall)C++14
28 / 100
1079 ms3960 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 = 272, M = 72901; int n, a[N], total; bitset <M> p[N], s[N], res, ans, tmp; void dbg(bitset <M> & b) { for (int i = 0; i < M; i++) { cout << b[i]; } cout << endl; } void solve(int tc) { // check for (int i = 0; i < n; j++) cin >> n; p[0][0] = 1; for (int i = 1; i <= n; i++) { cin >> a[i]; total += a[i]; p[i] = p[i - 1]; p[i] |= (p[i] << a[i]); } if ((total & 1) || !p[n][total >> 1]) { cout << 0; return; } s[n + 1][0] = 1; for (int i = n; i >= 1; i--) { s[i] = s[i + 1]; s[i] |= (s[i] << a[i]); } int w; ans.set(); for (int i = 1; i <= n; i++) { tmp = s[i + 1]; for (int j = 1; j < M; j++) { if (p[i - 1][j]) { tmp |= (s[i + 1] << j); } } res.reset(); w = total - a[i]; for (int j = (w & 1); j <= w; j += 2) { if (tmp[w + j >> 1] || tmp[w - 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:80:23: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
             if (tmp[w + j >> 1] || tmp[w - j >> 1]) {
                     ~~^~~
bootfall.cpp:80:42: warning: suggest parentheses around '-' inside '>>' [-Wparentheses]
             if (tmp[w + j >> 1] || tmp[w - 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...