Submission #1143153

#TimeUsernameProblemLanguageResultExecution timeMemory
1143153alexnicuWalk (POI13_spa)C++20
12 / 100
704 ms7464 KiB
#include <iostream>
#include <string>
#include <vector>
#include <queue>

using namespace std;

bool existing_numbers[(1<<23) + 5];

int string_to_number( string s ) {
    int ans = 0, pow = 0;
    for ( int i = s.size() - 1; i >= 0; i-- ) {
        if ( s[i] == '1' ) {
            ans = ans + ( 1 << pow );
        }
        pow++;
    }
    return ans;
}

vector<int> search_neighbors(int x, int n) {
    vector<int> ans;
    int cx = x;
    for ( int i = n - 1; i >= 0; i-- ) {
       if ( x >= (1 << i) ){
        ans.push_back(cx - (1 << i));
        x -= (1 << i);
       }
       else
        ans.push_back(cx + (1 << i));
    }
    return ans;
}

int main() {
    int n, k;
    cin >> n >> k;
    string a, b;
    cin >> a >> b;
    int start, finish;
    start = string_to_number(a);
    finish = string_to_number(b);
    string s;
    for ( int i = 1; i <= k; i++ ) {
        cin >> s;
        existing_numbers[string_to_number(s)] = true;
    }
    queue<int> q;
    q.push(start);
    existing_numbers[start] = true;
    while(!q.empty()) {
        int elem = q.front();
        vector<int> ans = search_neighbors(elem, n);
        for (auto nr : ans) {
            if ( existing_numbers[nr] == false ) {
               existing_numbers[nr] = true;
               q.push(nr);
            }
        }
        q.pop();
    }
    if ( existing_numbers[finish] == true )
        cout << "TAK";
    else
        cout << "NIE";
    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...