Submission #1143208

#TimeUsernameProblemLanguageResultExecution timeMemory
1143208alexnicuWalk (POI13_spa)C++17
12 / 100
223 ms122036 KiB
#include <iostream>
#include <string>
#include <vector>
#include <queue>

using namespace std;

int 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;
}
int finish;
bool ans = 0;
int n;
void dfs( int node ) {
    existing_numbers[node] = 1;
    if (existing_numbers[finish] == 1 ) {
        ans = 1;
        return;
    }
    for( int i = 0; i < n; i++ )
        if( existing_numbers[node ^ (1<<i)] == 0 )
            dfs((node ^ (1<<i)));
    return;
}

int main() {
    int k;
    cin >> n >> k;
    string a, b;
    cin >> a >> b;
    int start;
    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)] = 2;
    }
    if ( start == finish ) {
        cout << "TAK";
        return 0;
    }
    existing_numbers[start] = 1;
    dfs(start);
    if ( ans == 1 )
        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...