Submission #1209092

#TimeUsernameProblemLanguageResultExecution timeMemory
1209092TraianDanciuKpart (eJOI21_kpart)C++20
100 / 100
414 ms676 KiB
#include <iostream>

using namespace std;

const int MOD = 1000000007;
const int MAXN = 1000;
const int MAXSUM = 100000;

int v[MAXN + 1], rucsac[MAXSUM / 2 + 1], answer[MAXN + 1], sp[MAXN + 1];

int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);

  int t;
  cin >> t;
  while(t--) {
    int n;
    cin >> n;
    for(int i = 1; i <= n; i++) {
      cin >> v[i];
      answer[i] = 1;
      sp[i] = sp[i - 1] + v[i];
    }

    for(int i = 0; i <= sp[n] / 2; i++) {
      rucsac[i] = 0;
    }

    for(int i = 1; i <= n; i++) {
      for(int j = sp[n] / 2; j > v[i]; j--) {
        rucsac[j] = max(rucsac[j], rucsac[j - v[i]]);
      }
      rucsac[v[i]] = i;
      for(int k = 2; k <= i; k++) {
        if((sp[i] - sp[i - k]) % 2 || rucsac[(sp[i] - sp[i - k]) / 2] <= i - k) {
          answer[k] = 0;
        }
      }
    }

    int cnt = 0;
    for(int i = 2; i <= n; i++) {
      cnt += answer[i];
    }
    cout << cnt << " ";
    for(int i = 2; i <= n; i++) {
      if(answer[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...