Submission #1277895

#TimeUsernameProblemLanguageResultExecution timeMemory
1277895uzukishinobuKpart (eJOI21_kpart)C++20
100 / 100
1055 ms2080 KiB
#include <bits/stdc++.h>
#define int long long
using namespace std;
int z[1000005];
int dp[1000005];
int prefix[1000005];
int cnt[1000005];
vector <int> q[1000005];

void solve(){
    int a;
    cin >> a;
    for (int i=1;i<=a;i++){
         cin >> z[i];
         prefix[i]=prefix[i-1]+z[i];
    }
    int n=prefix[a];
    for (int i=1;i<=prefix[a];i++){
         dp[i]=0;
         cnt[i]=1;
    }
    for (int i=1;i<=a;i++){
         for (int s=n;s>=z[i];s--){
              dp[s]=max(dp[s],dp[s-z[i]]);
         }
         dp[z[i]]=max(dp[z[i]],i);
         for (int j=1;j<=a;j++){
              int l=i-j+1;
              if (l<=0){
                 break;
              }
              int sum=prefix[i]-prefix[l-1];
              if (sum%2==1){
                  cnt[j]=0;
              }else{
                  int p=sum/2;
                  if (dp[p]>=dp[sum]){
                      cnt[j]*=1;
                  }else{
                      cnt[j]=0;
                  }
              }
         }
    }
    vector <int> v;
    for (int i=1;i<=a;i++){
         if (cnt[i]){
             v.push_back(i);
         }
    }
    cout << v.size() << " ";
    for (auto p:v){
         cout << p << " ";
    }
    cout << "\n";
}

signed main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    int t;
    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...