답안 #151318

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
151318 2019-09-02T12:50:45 Z theboatman "The Lyuboyn" code (IZhO19_lyuboyn) C++17
14 / 100
71 ms 8568 KB
#include <bits/stdc++.h>

#define y1 theboatman
#define make_struct(args...) {args}

using namespace std;

typedef long long ll;

const long long INF = 1e18 + 10;
const int inf = 1e9 + 10;
const int N = 1e6 + 10;

string mask(int x, int n) {
    string mask;
    while(x) {
        mask.push_back(char((x % 2) + '0'));
        x /= 2;
    }


    while(mask.size() < n) {
        mask.push_back('0');
    }

    reverse(mask.begin(), mask.end());
    return mask;
}

int dist(int x, int y) {
    return __builtin_popcount(x ^ y);
}

void check(vector <int> ans, int k, int t) {
    for(int i = 1; i < ans.size(); i++) {
        if (dist(ans[i], ans[i - 1]) != k) {
            cout << "-1\n";
            exit(0);
        }
    }

    if (t && dist(ans.back(), ans[0]) != k) {
        cout << "-1\n";
        exit(0);
    }
}

int main() {
    cin.tie(0);
    ios::sync_with_stdio(0);

    int n, k, t;
    cin >> n >> k >> t;

    string s;
    cin >> s;

    vector <int> st;
    int now = 0, it = 0;
    vector <int> used(1 << n);
    while(now < (1 << n) && it < int(1e7)) {
        int x = (it ^ (it >> k));
        if (x < (1 << n) && !used[x]) {
            now++;
            st.push_back(x);
            used[x]++;
        }

        it++;
    }

    if (now != (1 << n)) {
        return cout << "-1\n", 0;
    }

    int pos = 0;
    for(auto i : st) {
        if (mask(i, n) == s) {
            break;
        }

        pos++;
    }

    vector <int> ans;
    for(int i = pos; i < (1 << n); i++) {
        ans.push_back(st[i]);
    }

    for(int i = 0; i < pos; i++) {
        ans.push_back(st[i]);
    }

    check(ans, k, t);

    cout << ans.size() << "\n";
    for(auto i : ans) {
        cout << mask(i, n) << "\n";
    }
    return 0;
}

/*
*/

Compilation message

lyuboyn.cpp: In function 'std::__cxx11::string mask(int, int)':
lyuboyn.cpp:22:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     while(mask.size() < n) {
           ~~~~~~~~~~~~^~~
lyuboyn.cpp: In function 'void check(std::vector<int>, int, int)':
lyuboyn.cpp:35:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i = 1; i < ans.size(); i++) {
                    ~~^~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 376 KB Ok
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 256 KB Output -1 while solution exists
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 504 KB Ok
2 Correct 9 ms 4632 KB Ok
3 Correct 5 ms 2548 KB Ok
4 Correct 2 ms 256 KB Ok
5 Correct 2 ms 376 KB Ok
6 Correct 2 ms 376 KB Ok
7 Correct 2 ms 504 KB Ok
8 Correct 5 ms 2548 KB Ok
# 결과 실행 시간 메모리 Grader output
1 Correct 71 ms 8568 KB Ok
2 Correct 35 ms 4336 KB Ok
3 Correct 2 ms 376 KB Ok
4 Correct 2 ms 376 KB Ok
5 Correct 2 ms 376 KB Ok
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 376 KB Output -1 while solution exists
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 23 ms 4592 KB Output -1 while solution exists
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 71 ms 8568 KB Ok
2 Correct 35 ms 4336 KB Ok
3 Correct 2 ms 376 KB Ok
4 Correct 2 ms 376 KB Ok
5 Correct 2 ms 376 KB Ok
6 Incorrect 2 ms 376 KB Output -1 while solution exists
7 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 12 ms 2548 KB Output -1 while solution exists
2 Halted 0 ms 0 KB -