Submission #1161662

#TimeUsernameProblemLanguageResultExecution timeMemory
1161662MisterReaper"The Lyuboyn" code (IZhO19_lyuboyn)C++20
100 / 100
20 ms6468 KiB
// Similar to Benq's solution, based on xor basis: https://oj.uz/submission/143064
// Also there is constructive solution like DeBrujin Sequences, see errorgorn's solution: https://oj.uz/submission/288552
#include <bits/stdc++.h>

using i64 = long long;

#ifdef DEBUG 
    #include "/home/ahmetalp/Desktop/Workplace/debug.h"
#else
    #define debug(...) void(23)
#endif

int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);

    int N, K, T;
    std::cin >> N >> K >> T;
    std::string S;
    std::cin >> S;

    if (K % 2 == 0) {
        std::cout << "-1\n";
        return 0;
    }

    std::vector<std::pair<int, int>> basis;
    for (int i = 0; i < (1 << N); ++i) {
        if (__builtin_popcount(i) != K) {
            continue;
        }
        int x = i;
        for (auto[j, _] : basis) {
            x = std::min(x, x ^ j);
        }
        if (x) {
            basis.emplace_back(x, i);
        }
    }

    debug(basis);

    assert(basis.size() == N);

    std::vector<int> ans(1 << N);
    for (int i = 1; i < (1 << N); ++i) {
        ans[i] = ans[i - 1] ^ basis[__builtin_ctz(i)].second;
    }

    debug(ans);

    std::cout << (1 << N) << '\n';
    for (int i = 0; i < (1 << N); ++i) {
        std::string s(N, '?');
        for (int j = 0; j < N; ++j) {
            s[j] = char('0' + (ans[i] >> j & 1)) ^ (S[j] - '0');
        }
        std::cout << s << '\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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...