Submission #964868

# Submission time Handle Problem Language Result Execution time Memory
964868 2024-04-17T16:47:57 Z zxcigan Kpart (eJOI21_kpart) C++17
100 / 100
1587 ms 195848 KB
#include <bits/stdc++.h>

using namespace std;
using ll = long long;
using ld = long double;

const int N = 1e6 + 1;
const int mod = 1e9 + 7;

template <typename T>
bool umx(T& a, T b) {
    return (a < b ? a = b, 1 : 0);
}
template <typename T>
bool umn(T& a, T b) {
    return (a > b ? a = b, 1 : 0);
}
int dp[1001][(int)5e4 + 2];
void solve () {
    int n;
    cin >> n;
    vector<int> a (n + 1);
    vector<int> pref (n + 1);
    for (int i = 1; i <= n; ++i) cin >> a[i], pref[i] = pref[i - 1] + a[i];
    for (int i = 1; i <= n; ++i) {
        for (int j = 0; j <= 5e4; ++j) dp[i][j] = dp[i - 1][j];
        dp[i][a[i]] = i;
        for (int j = 1; j <= 5e4; ++j) {
            if (j + a[i] > 5e4) break;
            umx (dp[i][j + a[i]], dp[i - 1][j]);
        }
    }
    vector<int> ans;
    for (int k = 1; k <= n; ++k) {
        bool bad = false;
        for (int l = 1; l <= n; ++l) {
            int r = l + k - 1;
            if (r > n) break;
            int s = pref[r] - pref[l - 1];
            if (s % 2) {
                bad = 1;
                break;
            }
            if (dp[r][s >> 1] < l) {
                bad = 1;
                break;
            }
        }
        if (!bad) ans.push_back(k);
    }
    cout << (int)ans.size() << ' ';
    for (auto it : ans) cout << it << ' ';
    cout << "\n";
}

signed main() {
#ifdef LOCAL
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
#else
    //    freopen ("input.txt", "r", stdin);
//    freopen ("output.txt", "w", stdout);
#endif

    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    int T = 1;
    cin >> T;
    while (T--) solve();
    return 0;
}
# Verdict Execution time Memory Grader output
1 Correct 33 ms 6492 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 88 ms 14680 KB Output is correct
2 Correct 179 ms 25068 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 332 ms 51752 KB Output is correct
2 Correct 596 ms 75436 KB Output is correct
3 Correct 582 ms 85308 KB Output is correct
4 Correct 837 ms 110664 KB Output is correct
5 Correct 1276 ms 171740 KB Output is correct
6 Correct 1587 ms 193112 KB Output is correct
7 Correct 1449 ms 195848 KB Output is correct