Submission #381553

#TimeUsernameProblemLanguageResultExecution timeMemory
381553topovikSemafor (COI20_semafor)C++14
0 / 100
5 ms748 KiB
#include <bits/stdc++.h> #define f first #define s second #define pb push_back #define len(x) x.size() #define debug(x) cout << #x << " is " << x << endl using namespace std; typedef long long ll; typedef long double ld; const ll N = 32; const ll oo = 1e9 + 7; const ll valid[10] = {8 + 2, 2, 8 + 1, 1 + 2 + 4, 2 + 16, 1 + 4 + 16, 8 + 4, 1 + 2, 1 + 4 + 8 + 16, 1 + 2 + 4 + 16}; ll sum(ll x, ll y) { return (x + y) % oo; } ll mult(ll x, ll y) { return (x * y) % oo; } vector <vector <ll> > mult(vector <vector <ll> > a, vector <vector <ll> > b) { vector <vector <ll> > c; c.resize(N); for (ll i = 0; i < N; i++) c[i].resize(N); for (ll i = 0; i < N; i++) for (ll j = 0; j < N; j++) { c[i][j] = 0; for (ll c1 = 0; c1 < N; c1++) c[i][j] = sum(c[i][j], mult(a[i][c1], b[c1][j])); } return c; } vector <vector <ll> > binpow(vector <vector <ll> > c, ll k) { if (k == 1) return c; if (k & 1) return mult(c, binpow(c, k - 1)); else { vector <vector <ll> > c1 = binpow(c, k / 2); return mult(c1, c1); } } int main() { vector <vector <ll> > b; vector <vector <ll> > a; ll m, n, k, x; cin >> m >> n >> k >> x; b.resize(N); for (ll i = 0; i < N; i++) b[i].resize(N); for (int i = 0; i < N; i++) for (int j = 0; j < N; j++) b[i][j] = 0; for (ll i = 0; i < N; i++) for (ll j = 0; (1 << j) < N; j++) b[i][i ^ (1 << j)] = 1, b[i ^ (1 << j)][i] = 1; a = binpow(b, k); vector <vector <ll> > c; c.resize(N); for (ll i = 0; i < N; i++) c[i].resize(N); for (int i = 0; i < N; i++) for (int j = 0; j < N; j++) c[i][j] = 0; for (ll i = 0; i < 10; i++) for (ll j = 0; j < 10; j++) c[valid[i]][valid[j]] = a[valid[i]][valid[j]]; a = c; a = binpow(a, n / k); if (n % k != 0) a = mult(binpow(b, n % k), a); for (ll i = 0; i < 10; i++) cout << a[valid[x]][valid[i]] << "\n"; }
#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...