#include <iostream>
#include <string>
#include <vector>
#include <queue>
using namespace std;
bool existing_numbers[(1<<23)];
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 = false;
int n;
void dfs( int node ) {
if (node == finish ) {
ans = true;
return;
}
int cx = node;
for ( int i = n - 1; i >= 0; i-- ) {
if ( node >= (1 << i) ){
if(existing_numbers[cx - (1 << i)] == false){
existing_numbers[cx - (1 << i)] = true;
dfs(cx - (1 << i));
}
node -= (1 << i);
}
else
if(existing_numbers[cx + (1 << i)] == false){
existing_numbers[cx + (1 << i)] = true;
dfs(cx + (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)] = true;
}
existing_numbers[start] = true;
dfs(start);
if ( ans == true )
cout << "TAK";
else
cout << "NIE";
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |