Submission #1150784

#TimeUsernameProblemLanguageResultExecution timeMemory
1150784vlqd0Kpart (eJOI21_kpart)C++20
0 / 100
2091 ms120724 KiB
#include <bits/stdc++.h> using namespace std; bool is_partition_possible(vector<int> v, int s){ vector<int> possible_sums, to_add; possible_sums.push_back(0); possible_sums.push_back(v[0]); for (int i = 1; i < v.size(); i++){ to_add = {}; for (int j = 0; j < possible_sums.size(); j++){ int current_sum = v[i] + possible_sums[j]; if (current_sum == s) return true; to_add.push_back(current_sum); } for (int x : to_add) possible_sums.push_back(x); } return false; } void solve(){ int n, current_num; vector<int> a; cin >> n; for (int i = 0; i < n; i++){ cin >> current_num; a.push_back(current_num); } bool verdict; int sum_of_subvector; vector<int> subvector, done, ans_for_k; for (int k = 2; k <= n; k++){ done = {}; for (int i = 0; i < n; i++) done.push_back(0); for (int starting_index = 0; starting_index < (n - k + 1); starting_index++){ if (starting_index == 0){ subvector = {}; sum_of_subvector = 0; for (int i = 0; i < k; i++) {subvector.push_back(a[i]); sum_of_subvector += a[i];} } else { sum_of_subvector -= subvector[0]; sum_of_subvector += a[k + starting_index - 1]; subvector.erase(subvector.begin()); subvector.push_back(a[k + starting_index - 1]); } if (sum_of_subvector % 2) continue; if (is_partition_possible(subvector, (sum_of_subvector / 2))){ for (int i = starting_index; i < (k + starting_index); i++) done[i] = 1; } } verdict = true; for (int b : done) if (b == 0) {verdict = false; break;} if (verdict) ans_for_k.push_back(k); } cout << ans_for_k.size(); for (int i : ans_for_k) cout << " " << i; } int main(){ int t; cin >> t; while(t--) {solve(); cout << "\n";} return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...