Submission #948466

#TimeUsernameProblemLanguageResultExecution timeMemory
948466NeroZeinSemafor (COI20_semafor)C++17
21 / 100
11 ms480 KiB
#include "bits/stdc++.h" using namespace std; #ifdef Nero #include "Deb.h" #else #define debug(...) #endif const int N = 32; //return this to 1024 const int md = (int) 1e9 + 7; int add(int a, int b) { a += b; if (a >= md) a -= md; return a; } int mul(int a, int b) { return (int) ((long long) a * b % md); } struct Matrix { int mat[N][N] = {}; Matrix operator * (const Matrix other) { Matrix ret; for (int i = 0; i < N; ++i) { for (int k = 0; k < N; ++k) { for (int j = 0; j < N; ++j) { ret.mat[i][k] = add(ret.mat[i][k], mul(mat[i][j], other.mat[j][k])); } } } return ret; } }; vector<int> value; void init() { value = {2 + 8, 2, 1 + 8, 1 + 2 + 4, 2 + 16, 1 + 4 + 16, 4 + 8, 1 + 2, 1 + 4 + 8 + 16, 1 + 2 + 4 + 16}; //for (int i = 1; i < 10; ++i) { //for (int j = 0; j < 10; ++j) { //value.push_back(value[i] * 32 + value[j]); //} //} } int f(int x) { //return this to 100 for (int i = 0; i < 10; ++i) { if (x == value[i]) { return i; } } return -1; } Matrix expo(Matrix b, long long p) { Matrix ret; for (int i = 0; i < N; ++i) { ret.mat[i][i] = 1; } while (p) { if (p & 1) { ret = ret * b; } b = b * b; p >>= 1; } return ret; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int m, x; long long n, k; cin >> m >> n >> k >> x; init(); Matrix m1; for (int i = 0; i < N; ++i) { for (int j = 0; j < 5; ++j) {//return this to 10 m1.mat[i][i ^ (1 << j)] = 1; } } Matrix m2 = expo(m1, k); for (int i = 0; i < N; ++i) { for (int j = 0; j < N; ++j) { int indi = f(i), indj = f(j); if (indi == -1 || indj == -1) { m2.mat[i][j] = 0; } } } Matrix m3 = expo(m2, n / k); m1 = expo(m1, n % k); Matrix m4 = m3 * m1; for (int i = 0; i < 10; ++i) {//return this to 100 cout << m4.mat[value[x]][value[i]] << '\n'; } return 0; }
#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...