#include <iostream>
#include <string>
#include <vector>
#include <queue>
using namespace std;
bool existing_numbers[(1<<23)-1];
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 finish;
bool ans = false;
vector<int> a;
int n;
void dfs( int node ) {
if (node == finish ) {
ans = true;
return ;
}
a = search_neighbors(node, n);
for ( auto nr: a ) {
if (existing_numbers[nr] == false ) {
existing_numbers[nr] = true;
dfs(nr);
}
}
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... |