Submission #556091

#TimeUsernameProblemLanguageResultExecution timeMemory
556091errayKpart (eJOI21_kpart)C++17
100 / 100
1081 ms1776 KiB
// author: erray
#include <bits/stdc++.h>

#ifdef DEBUG
  #include "debug.h"
#else
  #define debug(...) void(37)
#endif

using namespace std;

int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  int TT;
  cin >> TT;
  while (TT--) {
    int N;
    cin >> N;
    vector<int> A(N);
    for (int i = 0; i < N; ++i) {
      cin >> A[i];
    }
    vector<bool> ok(N, true);    
    vector<int> dp(1, -1);
    int s = 1;
    for (int i = 0; i < N; ++i) {
      s += A[i];
      dp.resize(s, -1);
      for (int j = s - 1; j > A[i]; --j) {
        dp[j] = max(dp[j], dp[j - A[i]]);
      }
      dp[A[i]] = i;
      int sum = 0;
      for (int j = i; j >= 0; --j) {
        sum += A[j];
        ok[i - j] = bool(ok[i - j]) && (sum % 2 == 0 && dp[sum / 2] >= j);
      }
    }
    
    cout << accumulate(ok.begin(), ok.end(), 0) << '\n';
    for (int i = 0; i < N; ++i) {
      if (ok[i]) {
        cout << i + 1 << ' ';
      }
    }
    cout << '\n';
  }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...