Submission #1280665

#TimeUsernameProblemLanguageResultExecution timeMemory
1280665daniyar228Kpart (eJOI21_kpart)C++20
10 / 100
2095 ms568 KiB
#include <bits/stdc++.h>
using namespace std;
using i64 = long long;
using pii = pair<i64, i64>;
#pragma GCC optimize("Ofast")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,avx2,mmx,fma,avx,tune=native")
const int N = 200'000, inf = 1'000'000'000;
const i64 infl = 1'000'000'000'000'000'000;
#define ff first
#define ss second
#define pb push_back
#define ins insert
#define sz(x) (int)(x).size()
#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()
#define NO cout << "NO\n"
#define YES cout << "YES\n"
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
int __tc = 1;
int n;
int a[N+5], b[N+5], p[N+5];
void solve() {
    vector<int>ans;
    cin >> n;
    for (int i = 1; i <= n; i++) cin >> a[i];
    for (int i = 1; i <= n; i++) p[i] = p[i-1] + a[i];
    for (int len = 1; len <= n; len++) {
        int ok = 1;
        for (int l = 1; l + len - 1 <= n; l++) {
            int f = 0;
            int r = l + len - 1;
            if ((p[r] - p[l - 1]) & 1) {
                ok = 0;
                break;
            }
            for (int i = 1, k = l; k <= r; i++, k++) b[i] = a[k];
            int m = r - l + 1;
            int d = m >> 1;
            i64 t = (p[r] - p[l - 1]) >> 1;
            set<i64>st;
            for (int P = 0; P < (1 << d); P++) {
                i64 sum = 0;
                for (int i = 1; i <= d; i++) if ((P >> (i - 1)) & 1) sum += b[i];
                st.ins(sum);
            }
            for (int P = 0; P < (1 << (m - d)); P++) {
                i64 sum = 0;
                for (int i = 1; i <= (m - d); i++) if ((P >> (i - 1)) & 1) sum += b[i + d];
                if (st.count(t - sum)) {
                    f = 1;
                    break;
                }
            }
            if (!f) {
                ok = 0;
                break;
            }
        }
        if (ok) ans.pb(len);
    }
    cout << sz(ans) << ' ';
    for (int x : ans) cout << x << ' ';
    cout << '\n';
}
int main() {
    ios_base::sync_with_stdio(false); cin.tie(nullptr); 
    cin >> __tc;
    for (int _tc = 1; _tc <= __tc; _tc++) {
        solve();
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...