Submission #967992

#TimeUsernameProblemLanguageResultExecution timeMemory
967992Gromp15Binaria (CCO23_day1problem1)C++17
14 / 25
225 ms98416 KiB
#include <bits/stdc++.h> #define ll long long #define ar array #define db double #define all(x) x.begin(), x.end() #define sz(x) (int)x.size() using namespace std; mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); #define rint(l, r) uniform_int_distribution<int>(l, r)(rng) template<typename T> bool ckmin(T &a, const T &b) { return a > b ? a = b, 1 : 0; } template<typename T> bool ckmax(T &a, const T &b) { return a < b ? a = b, 1 : 0; } const int mod = 1e6 + 3; void test_case() { int n, k; cin >> n >> k; vector<int> a(n - k + 1); for (int &x : a) cin >> x; vector<vector<ar<int, 2>>> adj(n); for (int i = 0; i < n-k; i++) { int w = a[i+1] - a[i]; adj[i].push_back({i + k, w}); adj[i + k].push_back({i, -w}); } vector<int> col(n); vector<bool> vis(n); auto dfs = [&](auto&& s, int v) -> void { vis[v] = 1; for (auto [u, w] : adj[v]) { if (!vis[u]) { col[u] = col[v] + w; s(s, u); } assert(col[u] == (col[v] + w)); } }; for (int i = 0; i < n; i++) if (!vis[i]) dfs(dfs, i); /* for (int x : col) cerr << x << " "; cerr << '\n'; */ int ans = 0; vector<int> state(k, -1); for (int i = 0; i < k; i++) { int b = 0; for (int j = i + k; j < n; j += k) { if (abs(col[j]) > 1) { cout << 0 << '\n'; return; } if (col[j] < 0) b |= 1; if (col[j] > 0) b |= 2; } if (b == 3) { cout << 0 << '\n'; return; } if (b == 1) state[i] = 1; if (b == 2) state[i] = 0; } for (int m = 0; m < 1 << k; m++) if (__builtin_popcount(m) == a[0]) { bool skip = 0; for (int i = 0; i < k; i++) { if (~state[i] && (m >> i & 1) != state[i]) { skip = 1; break; } } if (skip) continue; ans++; } cout << ans % mod << '\n'; } int main() { cin.tie(0)->sync_with_stdio(0); int t = 1; // cin >> t; while (t--) test_case(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...