Submission #1013688

#TimeUsernameProblemLanguageResultExecution timeMemory
1013688_fractalKpart (eJOI21_kpart)C++14
100 / 100
412 ms1108 KiB
#include <bits/stdc++.h> using namespace std; #define F first #define S second #define sz(x) (int)x.size() #define all(x) x.begin(), x.end() #define make_unique(x) sort(all(x)), x.erase(unique(all(x)), x.end()) mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); mt19937_64 Rng(chrono::steady_clock::now().time_since_epoch().count()); typedef long long ll; typedef long double ld; typedef unsigned long long ull; const int N = 1e3 + 20; const int M = 1e5 + 20; const int inf = 2e9 + 3; const ll INF = 1e18; int n; int a[N]; int dp[M], is[N]; void solve() { cin >> n; fill(is + 1, is + n + 1, 1); fill(dp, dp + M, 0); for (int i = 1, Sum = 0; i <= n; ++i) { cin >> a[i]; Sum += a[i]; for (int j = Sum; j >= a[i]; --j) dp[j] = max(dp[j], dp[j - a[i]]); dp[0] = dp[a[i]] = i; for (int j = i, sum = 0; j >= 1; --j) { sum += a[j]; if (sum % 2 == 1 || dp[sum / 2] < j) is[i - j + 1] = 0; } } cout << accumulate(is + 1, is + n + 1, 0) << '\n'; for (int i = 1; i <= n; ++i) if (is[i]) cout << i << " "; cout << '\n'; } int main() { ios_base::sync_with_stdio(0), cin.tie(0); int t; cin >> t; while (t--) solve(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...