#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 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... |