Submission #746577

#TimeUsernameProblemLanguageResultExecution timeMemory
746577pascalKpart (eJOI21_kpart)C++14
30 / 100
2048 ms688 KiB
#include <bits/stdc++.h> using namespace std; template <int MOD> void compute(int N, const int A[], int out[]) { bitset<MOD> S; for (int deb = 0; deb < N; deb++) { bitset<1024> S; S[0] = true; int somme = 0; for (int fin = deb; fin < N; fin++) { somme += A[fin]; S = S | (S << (A[fin] % MOD) | S >> (MOD - (A[fin] % MOD))); if (somme % 2 == 1 || !S[(somme / 2) % MOD]) out[fin - deb] = 1; } } } int main() { int T; cin >> T; for (int i = 0; i < T; i++) { int N; cin >> N; int A[N]; for (int i = 0; i < N; i++) { cin >> A[i]; } int out[N] = {0}; compute<1024>(N, A, out); compute<1023>(N, A, out); compute<1021>(N, A, out); /* for (int deb = 0; deb < N; deb++) { bitset<1024> S; S[0] = true; int somme = 0; for (int fin = deb; fin < N; fin++) { somme += A[fin]; S = S | (S << A[fin] | S >> (1024 - (A[fin] % 1024))); if (somme % 2 == 1 || !S[(somme / 2) % 1024]) out[fin - deb] = 1; } }*/ int nb = 0; for (int i = 0; i < N; i++) if (out[i] == 0) nb++; cout << nb; for (int i = 0; i < N; i++) if (out[i] == 0) cout << " " << i + 1; cout << endl; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...