Submission #1150777

#TimeUsernameProblemLanguageResultExecution timeMemory
1150777somefolkKpart (eJOI21_kpart)C++20
10 / 100
2095 ms480 KiB
#include <iostream> #include <cmath> #include <algorithm> #include <string> #include <vector> #include <map> #include <unordered_map> #include <queue> #include <set> #include <unordered_set> #include <complex> #include <list> #include <cassert> #include <chrono> #include <random> #include <stack> #include <iomanip> #include <fstream> using namespace std; #define endl "\n" // #define int long long const int INF = 2 * 1e5 + 5; const int MOD = 1e9 + 7; bool check(int sum, int n, vector<int> &a){ vector<bool> dp(sum+1, false), curr(sum+1); dp[0] = true; for(int i = 1; i <= n; i++){ for(int j = 0; j <= sum; j++){ if(j < a[i-1]){ curr[j] = dp[j]; } else{ if(dp[j] == true) curr[j] = true; if(dp[j-a[i-1]] == true) curr[j] = true; } } dp = curr; if(dp[sum] == 1){ return true; } } return false; } vector<int> get(int l, int r, vector<int> a){ vector<int> b(r-l+1); int k = 0; for(int i = l; i <= r; i++){ b[k] = a[i]; k++; } return b; } void solve(){ int n; cin >> n; vector<int> a(n), pref(n); for(int i = 0; i < n; i++){ cin >> a[i]; if(!i) pref[i] = a[i]; else pref[i] = pref[i-1] + a[i]; } set<int> sol; for(int k = 2; k <= n; k++){ bool good = true; for(int i = k; i <= n; i++){ vector<int> b = get(i-k, i-1, a); int sum = pref[i-1] - pref[i-k-1]; if(sum%2!=0){ good = false; break; } if(!check(sum/2, k, b)){ good = false; break; } } if(good){ sol.insert(k); } } cout << sol.size() << " "; for(auto &i : sol){ cout << i << " "; } cout << endl; } int32_t main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr); int t = 1; 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...