답안 #173921

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
173921 2020-01-05T19:48:42 Z emil_physmath "The Lyuboyn" code (IZhO19_lyuboyn) C++17
31 / 100
1000 ms 7928 KB
#include <algorithm>
#include <vector>
#include <string>
#include <iostream>
using namespace std;
typedef unsigned int uint;

int n;
uint a[1 << 20];
bool used[1 << 20];
int changeInd[1 << 20];

ostream& PrintBin(uint a)
{
    for (int i = n - 1; i >= 0; --i)
        cout << (bool)(a & (1 << i));
    return cout;
}
int Bits(uint a)
{
    int res = 0;
    while (a)
    {
        res += a & 1;
        a >>= 1;
    }
    return res;
}
void Print(const string& s_str)
{
    uint s = 0;
    for (int i = 0; i < s_str.length(); ++i)
        if (s_str[i] == '1')
            s += (1U << i);
    cout << (1 << n) << endl;
    for (auto it = find(a, a + (1 << n), s); it != a + (1 << n); ++it)
        PrintBin(*it) << '\n';
    for (int i = 0; a[i] != s; ++i)
        PrintBin(a[i]) << '\n';
}
int main()
{
    int k, t;
    cin >> n >> k >> t;
    vector<uint> changes;
    for (uint mask = 0; mask < (1U << n); ++mask)
        if (Bits(mask) == k)
        {
            changes.push_back(mask);
            // PrintBin(mask) << endl;
        }
    random_shuffle(changes.begin(), changes.end());
    string s;
    cin >> s;
    int top = 1;
    used[0] = true;
    while (top)
    {
        /*cerr << "top = " << top << endl;
        for (int i = 0; i < top; ++i)
            PrintBin(a[i]) << '\n';*/
        if (top == (1 << n))
        {
            if (Bits(a[0] ^ a[top - 1]) == k)
            {
                Print(s);
                exit(0);
            }
            else
            {
                if (++changeInd[top - 1] == changes.size())
                {
                    cout << "-1\n";
                    exit(0);
                }
                used[a[top - 1]] = false;
                --top;
            }
        }
        if (changeInd[top] == changes.size())
        {
            changeInd[top] = 0;
            used[a[top - 1]] = false;
            --top;
        }
        else
        {
            uint newTop = a[top - 1] ^ changes[changeInd[top]];
            // cerr << "XORed with " << changes[changeInd[top]] << endl;
            // cerr << "newTop: " << newTop << endl;
            if (!used[newTop])
            {
                a[top] = newTop;
                ++changeInd[top];
                used[newTop] = true;
                ++top;
            }
            else
                ++changeInd[top];
        }
    }
    cout << -1 << endl;
}

Compilation message

lyuboyn.cpp: In function 'void Print(const string&)':
lyuboyn.cpp:33:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int i = 0; i < s_str.length(); ++i)
                     ~~^~~~~~~~~~~~~~~~
lyuboyn.cpp: In function 'int main()':
lyuboyn.cpp:72:42: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
                 if (++changeInd[top - 1] == changes.size())
                     ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
lyuboyn.cpp:81:28: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         if (changeInd[top] == changes.size())
             ~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 376 KB First number in answer is not x 1 2
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 376 KB Ok
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1069 ms 376 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 301 ms 7700 KB Ok
2 Correct 146 ms 3912 KB Ok
3 Correct 3 ms 376 KB Ok
4 Correct 2 ms 376 KB Ok
5 Correct 2 ms 376 KB Ok
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 376 KB Ok
2 Correct 9 ms 504 KB Ok
3 Correct 147 ms 3832 KB Ok
4 Correct 70 ms 2040 KB Ok
5 Correct 2 ms 372 KB Ok
6 Correct 3 ms 376 KB Ok
7 Correct 34 ms 1144 KB Ok
8 Correct 2 ms 376 KB Ok
# 결과 실행 시간 메모리 Grader output
1 Incorrect 312 ms 7928 KB First number in answer is not x 44202 87252
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 301 ms 7700 KB Ok
2 Correct 146 ms 3912 KB Ok
3 Correct 3 ms 376 KB Ok
4 Correct 2 ms 376 KB Ok
5 Correct 2 ms 376 KB Ok
6 Correct 2 ms 376 KB Ok
7 Correct 9 ms 504 KB Ok
8 Correct 147 ms 3832 KB Ok
9 Correct 70 ms 2040 KB Ok
10 Correct 2 ms 372 KB Ok
11 Correct 3 ms 376 KB Ok
12 Correct 34 ms 1144 KB Ok
13 Correct 2 ms 376 KB Ok
14 Incorrect 312 ms 7928 KB First number in answer is not x 44202 87252
15 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 149 ms 3904 KB First number in answer is not x 92826 45741
2 Halted 0 ms 0 KB -