Submission #632462

#TimeUsernameProblemLanguageResultExecution timeMemory
632462pragmatistKpart (eJOI21_kpart)C++17
0 / 100
2069 ms700 KiB
#include<bits/stdc++.h> #define ll long long #define pb push_back #define sz(v) (int)v.size() #define nl "\n" using namespace std; const int N = (int)1e3 + 7; const int MOD = (int)1e9 + 7; const int M = (int)1e5 + 7; int sum(int x, int y) { x += y; if(x >= MOD) x -= MOD; return x; } int sub(int x, int y) { x -= y; if(x < 0) x += MOD; return x; } int n, a[N], dp[M]; void add(int x) { for(int i = M - 1; i >= x; --i) { dp[i] = sum(dp[i], dp[i - x]); } } void del(int x) { for(int i = x; x < M; ++x) { dp[i] = sub(dp[i], dp[i - x]); } } bool check(int sum) { if(sum & 1) return 0; return (dp[sum / 2] > 0); } void solve() { cin >> n; for(int i = 1; i <= n; ++i) cin >> a[i]; vector<int> ans; for(int k = 2; k <= n; ++k) { memset(dp, 0, sizeof(dp)); dp[0] = 1; int sum = 0; for(int i = 1; i <= k; ++i) { sum += a[i]; add(a[i]); } bool ok = check(sum); for(int i = k + 1; i <= n && ok; ++i) { sum -= a[i - k]; sum += a[i]; del(a[i - k]); add(a[i]); ok &= check(sum); } if(ok) ans.pb(k); } cout << sz(ans) << ' '; for(auto x : ans) cout << x << ' '; cout << nl; } int main() { ios_base::sync_with_stdio(NULL); cin.tie(0); cout.tie(0); int test; cin >> test; while(test--) { solve(); } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...