Submission #650702

#TimeUsernameProblemLanguageResultExecution timeMemory
650702sofija6Kpart (eJOI21_kpart)C++14
100 / 100
1723 ms196108 KiB
#include <bits/stdc++.h> #define ll int #define MAXN 1010 #define MAXS 100010 using namespace std; ll a[MAXN],dp[MAXN][MAXS/2],pref[MAXN]; bool yes[MAXN]; int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); ll t,n; cin >> t; while (t--) { cin >> n; for (ll i=1;i<=n;i++) { cin >> a[i]; pref[i]=pref[i-1]+a[i]; } for (ll i=1;i<=n;i++) { yes[i]=true; for (ll j=0;j<=pref[n]/2;j++) dp[i][j]=0; } for (ll i=1;i<=n;i++) { for (ll j=0;j<=pref[n]/2;j++) { if (j>=a[i]) dp[i][j]=max(dp[i-1][j],dp[i-1][j-a[i]]); else dp[i][j]=dp[i-1][j]; } dp[i][a[i]]=i; } ll ans=n; for (ll i=1;i<=n;i++) { for (ll j=i;j<=n;j++) { if (!yes[j-i+1]) continue; if ((pref[j]-pref[i-1])&1 || dp[j][(pref[j]-pref[i-1])/2]<i) { yes[j-i+1]=false; ans--; } } } cout << ans << " "; for (ll i=1;i<=n;i++) { if (yes[i]) cout << i << " "; } cout << "\n"; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...