Submission #1280671

#TimeUsernameProblemLanguageResultExecution timeMemory
1280671toplion7Kpart (eJOI21_kpart)C++20
10 / 100
2095 ms572 KiB
#include <bits/stdc++.h> using namespace std; #define int long long const int inf = 1e18 + 7; const int MOD = 998244353; const int MAXXX = 1000 + 6; const int OFFSET = 200; void Make_set(vector<int>& v) { set<int> s(v.begin(), v.end()); v.assign(s.begin(), s.end()); } signed main() { // freopen("input.txt", "r", stdin); // freopen("output.txt", "w", stdout); ios::sync_with_stdio(false); cin.tie(nullptr); int T; cin >> T; for (int K = 0; K < T; K++) { int n; cin >> n; int a[n+1]; for(int i = 1; i <= n; i++) { cin >> a[i]; } int pr[n+1], cnt = 0, X = a[1]; pr[0] = 0; for(int i = 1; i <= n; i++) { pr[i] = pr[i - 1] + a[i]; if(a[i] == X) cnt++; } vector<int> ans; if(cnt == n) { for(int k = 2; k <= n; k += 2) { ans.push_back(k); } } else { for(int k = 2; k <= n; k++) { bool V = 1; for(int l = 1; l + k - 1 <= n; l++) { int r = l + k - 1; int sum = pr[r] - pr[l - 1]; if(sum % 2 != 0) { V = 0; break; } int x = sum / 2; vector<bool> dp(x + 1, 0); dp[0] = 1; for (int i = l; i <= r; i++) { for (int j = x; j >= a[i]; j--) { if (dp[j - a[i]]) { dp[j] = 1; } } } if (!dp[x]) { V = 0; break; } } if (V) { ans.push_back(k); } } } Make_set(ans); cout << ans.size(); for(int i = 0; i < ans.size(); i++) { cout << " " << ans[i]; } cout << endl; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...