#include <iostream>
#include <map>
#include <queue>
#include <algorithm>
using namespace std;
#define int long long
int X, Y, o = 1;
int Seen[(1<<22)];
map<int, int> seen, seen1, seen2;
vector<int> vec;
int get(int n, int inp = 0){
while (n--){
char c;
cin>>c;
inp = inp * 2 + c - '0';
}
return inp;
}
void dfs(int n, int x, int num = 0){
queue<int> Q;
Q.push(x);
seen[x] = 1;
clock_t start, end;
start = clock();
while (!Q.empty()){
int cur = Q.front();
Q.pop();
for (int i=0;i<n;i++){
cur ^= (o<<vec[i]);
if (!seen2[cur] and !seen[cur])
seen[cur] = 1, Q.push(cur);
cur ^= (o<<vec[i]);
}
end = clock();
double time_taken = double(end - start) / double(CLOCKS_PER_SEC);
if (time_taken >= 0.900)
return;
}
}
void dfs2(int n, int x, int num = 0){
queue<int> Q;
Q.push(x);
seen1[x] = 1;
if (seen[x] == 1){
cout<<"TAK\n";
exit(0);
}
clock_t start, end;
start = clock();
while (!Q.empty()){
int cur = Q.front();
Q.pop();
for (int i=0;i<n;i++){
cur ^= (o<<vec[i]);
if (seen[cur]){
cout<<"TAK\n";
exit(0);
}
if (!seen2[cur] and !seen1[cur])
seen1[cur] = 1, Q.push(cur);
cur ^= (o<<vec[i]);
}
end = clock();
double time_taken = double(end - start) / double(CLOCKS_PER_SEC);
if (time_taken >= 0.90000)
return;
}
}
void dfs11(int n, int x){
// cout<<x<<endl;
if (x == Y){
cout<<"TAK\n";
exit(0);
}
if (Seen[x])
return;
Seen[x] = 1;
for (int i=0;i<n;i++){
// cout<<i<<" "<<(x ^ (o <<i))<<endl;
dfs11(n, x ^ (o<<i));
}
}
signed main(){
srand(time(0));
ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
int n, k;
cin>>n>>k;
X = get(n), Y = get(n);
for (int i=1, K;i<=k;i++)
K = get(n), seen2[K] = Seen[K] = 1;
dfs11(n, X);
// return 0;
for (int i=0;i<n;i++)
vec.push_back(i);
for (int i=1;i<rand() % 10;i++)
random_shuffle(begin(vec), end(vec));
dfs(n, X);
for (int i=1;i<rand() % 10;i++)
random_shuffle(begin(vec), end(vec));
dfs2(n, Y);
cout<<"NIE\n";
}
# | 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... |