Submission #516206

#TimeUsernameProblemLanguageResultExecution timeMemory
516206Ronin13Kpart (eJOI21_kpart)C++14
100 / 100
1943 ms196092 KiB
#include<bits/stdc++.h> #define ll long long #define f first #define s second #define pii pair<int,int> #define pll pair<ll,ll> #define ull unsigned ll #define pb push_back #define epb emplace_back #define inf 1e9+1 #define linf 1e18+1 using namespace std; int dp[1001][50001]; int pref[1001]; void solve(){ int n;cin>>n; int a[n+1]; for(int i=1;i<=n;i++){ cin>>a[i]; } for(int i=0;i<=n;i++){ for(int j=0;j<=50000;j++)dp[i][j]=-1; pref[i]=0; } for(int i=1;i<=n;i++){ pref[i]=pref[i-1]+a[i]; } dp[0][0]=0; for(int i=1;i<=n;i++){ for(int j=50000;j>=1;j--){ dp[i][j]=dp[i-1][j]; if(j>a[i])dp[i][j]=max(dp[i-1][j-a[i]],dp[i][j]); if(j==a[i])dp[i][j]=i; } } vector<int>ans; for(int i=2;i<=n;i++){ bool ind=true; for(int j=i;j<=n;j++){ int sum=pref[j]-pref[j-i]; if(sum&1){ ind=false; break; } if(dp[j][sum/2]<=j-i){ ind=false; break; } } if(ind)ans.pb(i); } cout<<ans.size()<<" "; for(int to:ans)cout<<to<<' '; cout<<"\n"; } int main(){ int test=1;cin>>test; while(test--)solve(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...