답안 #151313

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
151313 2019-09-02T12:40:04 Z theboatman "The Lyuboyn" code (IZhO19_lyuboyn) C++17
컴파일 오류
0 ms 0 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;
    }

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

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

    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;
    for(int i = 0; i < (1 << n); i++) {
        st.push_back(i ^ (i >> k));
    }

    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);
    
    if (mask(ans[0]) != s) {
        cout << 1 / 0 << "\n";
    }
    
    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:23: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++) {
                    ~~^~~~~~~~~~~~
lyuboyn.cpp: In function 'int main()':
lyuboyn.cpp:83:20: error: too few arguments to function 'std::__cxx11::string mask(int, int)'
     if (mask(ans[0]) != s) {
                    ^
lyuboyn.cpp:14:8: note: declared here
 string mask(int x, int n) {
        ^~~~
lyuboyn.cpp:84:19: warning: division by zero [-Wdiv-by-zero]
         cout << 1 / 0 << "\n";
                 ~~^~~