Submission #790949

#TimeUsernameProblemLanguageResultExecution timeMemory
790949otariusKpart (eJOI21_kpart)C++17
100 / 100
1450 ms193500 KiB
#include <iostream> #include <algorithm> #include <vector> #include <set> #include <cstring> #include <queue> #include <map> #include <cmath> #include <iomanip> using namespace std; #define ff first #define sc second #define pb push_back #define ll long long #define pll pair<ll, ll> #define pii pair <int, int> #define ull unsigned long long // #define int long long // #define int unsigned long long const ll inf = 1e9 + 7; const ll weirdMod = 998244353; void solve() { int n; cin >> n; int arr[n + 1], pref[n + 1]; pref[0] = 0; for (int i = 1; i <= n; i++) { cin >> arr[i]; pref[i] = arr[i] + pref[i - 1]; } int sum = pref[n], dp[n + 1][sum / 2 + 5], cur; for (int i = 0; i <= n; i++) for (int j = 0; j <= sum / 2; j++) dp[i][j] = 0; for (int i = 1; i <= n; i++) { for (int j = 1; j <= sum / 2; j++) { dp[i][j] = dp[i - 1][j]; if (j > arr[i]) dp[i][j] = max(dp[i][j], dp[i - 1][j - arr[i]]); if (j == arr[i]) dp[i][j] = i; } } vector<int> good; for (int len = 2; len <= n; len++) { bool flg = 1; for (int i = len; i <= n; i++) { cur = pref[i] - pref[i - len]; if ((cur & 1) || dp[i][cur / 2] <= i - len) { flg = 0; break; } } if (flg) good.pb(len); } cout << good.size() << ' '; for (int v : good) cout << v << ' '; } int32_t main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); int t = 1; 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...