Submission #664125

#TimeUsernameProblemLanguageResultExecution timeMemory
664125AstraytBootfall (IZhO17_bootfall)C++17
28 / 100
1087 ms55472 KiB
//君の手を握ってしまったら //孤独を知らないこの街には //もう二度と帰ってくることはできないのでしょう //君が手を差し伸べた 光で影が生まれる //歌って聞かせて この話の続き //連れて行って見たことない星まで //さユリ - 花の塔 #include <bits/stdc++.h> using namespace std; typedef long long ll; #define int ll #define starburst ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); #define pii pair<int,int> #define pb push_back #define ff first #define ss second #define mp make_pair #define maxn 200005 #define mod 1000000007 void solve(){ int n, sum = 0; cin >> n; vector<int> v(n); for(auto &x:v) cin >> x, sum += x; sort(v.begin(), v.end()); vector<vector<int>> dp(2, vector<int>(sum + 1, 0)); dp[0][0] = 1; for(int i = 0; i < n; ++i){ dp[1].assign(sum + 1, 0); for(int j = 0; j <= sum; ++j){ dp[1][j] |= dp[0][j]; if(j >= v[i]) dp[1][j] |= dp[0][j - v[i]]; } dp[0] = dp[1]; } if(sum % 2 == 1 || dp[1][sum / 2] == 0){ cout << "0\n"; return; } set<int> tans[n], ans; for(int k = 0; k < n; ++k){ dp[0].assign(sum - v[k] + 1, 0); dp[1].assign(sum - v[k] + 1, 0); dp[0][0] = 1; for(int i = 0; i < n; ++i){ if(i == k) continue; dp[1].assign(sum + 1, 0); for(int j = 0; j <= sum - v[k]; ++j){ dp[1][j] |= dp[0][j]; if(j >= v[i]) dp[1][j] |= dp[0][j - v[i]]; } dp[0] = dp[1]; } for(int val = sum - v[k]; val >= 0; --val){ if(dp[1][val]) { int t = val - (sum - val - v[k]); if(t <= 0) break; tans[k].insert(t), ans.insert(t); } } } for(int i = 0; i < n; ++i){ set<int> tmp; for(auto x:ans) if(tans[i].find(x) != tans[i].end()) tmp.insert(x); ans = tmp; } cout << ans.size() << '\n'; for(auto x:ans) cout << x << ' '; } signed main(){ starburst int t = 1; //cin >> t; while(t--) solve(); }
#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...