Submission #645721

#TimeUsernameProblemLanguageResultExecution timeMemory
645721Koful123Kpart (eJOI21_kpart)C++17
100 / 100
1358 ms828 KiB
#include <bits/stdc++.h> using namespace std; #define double long double #define endl "\n" #define pb push_back #define ff first #define ss second #define mod 998244353 #define all(x) (x).begin(), (x).end() #define rall(x) (x).rbegin(), (x).rend() void solve(){ int n,sum = 0; cin >> n; int v[n+1] = {0},ok[n+1]; for(int i=1;i<=n;i++){ cin >> v[i]; sum += v[i]; ok[i] = 1; } int dp[sum + 1] = {0}; for(int i=1,tot = v[1];i<=n;i++,tot += v[i]){ for(int j=sum-v[i];j>=1;j--){ dp[j+v[i]] = max(dp[j+v[i]],dp[j]); } dp[v[i]] = max(dp[v[i]],i); int sum = tot; for(int j=0;j<i;j++){ sum -= v[j]; if(sum % 2 || dp[sum / 2] <= j){ ok[i-j] = 0; } } } vector<int> ans; for(int i=1;i<=n;i++){ if(ok[i]) ans.pb(i); } cout << ans.size() << ' '; for(int x : ans){ cout << x << ' '; } cout << endl; } signed main(){ ios::sync_with_stdio(0); cin.tie(0); int t = 1; cin >> t; while(t--) solve(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...