CP-Algorithms Library

This documentation is automatically generated by competitive-verifier/competitive-verifier

View the Project on GitHub cp-algorithms/cp-algorithms-aux

:heavy_check_mark: Matrix Product (Mod 2) (verify/structures/bitpack/prod_mod_2.test.cpp)

Depends on

Code

// @brief Matrix Product (Mod 2)
#define PROBLEM "https://judge.yosupo.jp/problem/matrix_product_mod_2"
#pragma GCC optimize("O3,unroll-loops")
#define CP_ALGO_CHECKPOINT
#pragma GCC target("avx2")
#include "cp-algo/structures/bit_array_util.hpp"
#include "cp-algo/util/checkpoint.hpp"
#include <bits/stdc++.h>

using namespace std;
using namespace cp_algo::structures;

const int maxn = 1 << 12;
const size_t K = 8;

using bitpack = cp_algo::structures::bit_array<maxn>;

bitpack a[maxn], b[maxn], c[maxn];
bitpack precalc[1 << K];

void process_precalc(int i) {
    for(size_t j = 0; j < K; j++) {
        int step = 1 << j;
        for(int k = 0; k < step; k++) {
            precalc[k + step] = precalc[k] ^ b[i + j];
        }
    }
}

void solve() {
    int n, m, k;
    cin >> n >> m >> k;
    cp_algo::checkpoint("init");
    cp_algo::big_string row;
    for(int i = 0; i < n; i++) {
        cin >> row;
        from_string(a[i], row);
    }
    for(int i = 0; i < m; i++) {
        cin >> row;
        from_string(b[i], row);
    }
    for(auto &it: c) {
        it.resize(k);
    }
    for(auto &it: precalc) {
        it.resize(k);
    }
    cp_algo::checkpoint("read");
    const int width = bitpack::width;
    for(int j = 0; j < m; j += width) {
        for(int offset = 0; offset < width; offset += K) {
            process_precalc(j + offset);
            for(int i = 0; i < n; i++) {
                c[i] ^= precalc[uint8_t(a[i].word(j / width) >> offset)];
            }
        }
    }
    cp_algo::checkpoint("mul");
    for(int i = 0; i < n; i++) {
        cout << to_string(c[i]) << "\n";
    }
    cp_algo::checkpoint("write");
    cp_algo::checkpoint<1>();
}

signed main() {
    //freopen("input.txt", "r", stdin);
    ios::sync_with_stdio(0);
    cin.tie(0);
    int t = 1;
    while(t--) {
        solve();
    }
}
Traceback (most recent call last):
  File "/home/runner/.local/lib/python3.12/site-packages/competitive_verifier/oj_resolve/resolver.py", line 181, in resolve
    bundled_code = language.bundle(path, basedir=basedir)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/runner/.local/lib/python3.12/site-packages/competitive_verifier/oj/verify/languages/cplusplus.py", line 252, in bundle
    bundler.update(path)
  File "/home/runner/.local/lib/python3.12/site-packages/competitive_verifier/oj/verify/languages/cplusplus_bundle.py", line 327, in update
    assert len(lines) == len(uncommented_lines)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError

Test cases

Env Name Status Elapsed Memory
g++ example_00 :heavy_check_mark: AC 7 ms 6 MB
g++ example_01 :heavy_check_mark: AC 7 ms 6 MB
g++ example_02 :heavy_check_mark: AC 6 ms 6 MB
g++ many_1_00 :heavy_check_mark: AC 181 ms 11 MB
g++ many_1_01 :heavy_check_mark: AC 176 ms 11 MB
g++ max_random_00 :heavy_check_mark: AC 189 ms 11 MB
g++ max_random_01 :heavy_check_mark: AC 188 ms 11 MB
g++ max_random_02 :heavy_check_mark: AC 187 ms 11 MB
g++ middle_00 :heavy_check_mark: AC 10 ms 7 MB
g++ middle_01 :heavy_check_mark: AC 7 ms 7 MB
g++ middle_02 :heavy_check_mark: AC 8 ms 7 MB
g++ middle_03 :heavy_check_mark: AC 7 ms 7 MB
g++ middle_04 :heavy_check_mark: AC 12 ms 7 MB
g++ random_00 :heavy_check_mark: AC 119 ms 10 MB
g++ random_01 :heavy_check_mark: AC 92 ms 9 MB
g++ random_02 :heavy_check_mark: AC 85 ms 9 MB
g++ small_00 :heavy_check_mark: AC 7 ms 6 MB
g++ small_01 :heavy_check_mark: AC 7 ms 6 MB
g++ small_02 :heavy_check_mark: AC 6 ms 6 MB
g++ small_03 :heavy_check_mark: AC 7 ms 6 MB
g++ small_04 :heavy_check_mark: AC 7 ms 6 MB
g++ small_05 :heavy_check_mark: AC 7 ms 6 MB
g++ small_06 :heavy_check_mark: AC 7 ms 6 MB
g++ small_07 :heavy_check_mark: AC 7 ms 6 MB
g++ small_08 :heavy_check_mark: AC 7 ms 6 MB
g++ small_09 :heavy_check_mark: AC 7 ms 6 MB
Back to top page