#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
string c;
struct Para{
int s;
int t;
Para(int s_i, int t_i){
this->s = s_i;
this->t = t_i;
}
};
bool dfs(int s, int d, int n, int m, bool**t, bool** visited){
bool tmp = false;
if(visited[s][d]){
return false;
}
if(s == (n-1) && d == (m-1)){
tmp = true;
}else{
if((s+1)< n && t[s+1][d] == false){
tmp = tmp || dfs(s+1,d,n, m, t, visited);
}
if((d+1)< m && t[s][d+1] == false){
tmp = tmp || dfs(s,d+1,n, m,t, visited);
}
}
return tmp;
}
int main(){
int n = 0;
int m = 0;
int k = 0;
int r = 0;
int c = 0;
int z = 0;
int x = 0;
int a = 0;
int b = 0;
cin >> n;
cin >> m;
cin >> k;
bool **t;
t = new bool *[n];
for(int i = 0; i <n; i++)
t[i] = new bool[m];
bool **pomoc;
pomoc = new bool *[n];
for(int i = 0; i <n; i++)
pomoc[i] = new bool[m];
for(int i=0; i<n; ++i){
for(int j=0; j<m; ++j){
t[i][j]=false;
}
}
for(int v=0; v<k; ++v){
cin >> r;
cin >> c;
cin >> z;
a = (r ^ x) % n;
b = (c ^ x) % m;
t[a][b]=true;
for(int i=0; i<n; ++i){
for(int j=0; j<m; ++j){
pomoc[i][j]=false;
}
}
bool isPath = dfs(0,0,n,m,t,pomoc);
if(isPath){
cout << "NIE" << "\n";
}else{
cout << "TAK" << "\n";
t[a][b]=false;
x = x ^ z;
}
}
return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 | #include <cstdio> #include <iostream> #include <algorithm> using namespace std; string c; struct Para{ int s; int t; Para(int s_i, int t_i){ this->s = s_i; this->t = t_i; } }; bool dfs(int s, int d, int n, int m, bool**t, bool** visited){ bool tmp = false; if(visited[s][d]){ return false; } if(s == (n-1) && d == (m-1)){ tmp = true; }else{ if((s+1)< n && t[s+1][d] == false){ tmp = tmp || dfs(s+1,d,n, m, t, visited); } if((d+1)< m && t[s][d+1] == false){ tmp = tmp || dfs(s,d+1,n, m,t, visited); } } return tmp; } int main(){ int n = 0; int m = 0; int k = 0; int r = 0; int c = 0; int z = 0; int x = 0; int a = 0; int b = 0; cin >> n; cin >> m; cin >> k; bool **t; t = new bool *[n]; for(int i = 0; i <n; i++) t[i] = new bool[m]; bool **pomoc; pomoc = new bool *[n]; for(int i = 0; i <n; i++) pomoc[i] = new bool[m]; for(int i=0; i<n; ++i){ for(int j=0; j<m; ++j){ t[i][j]=false; } } for(int v=0; v<k; ++v){ cin >> r; cin >> c; cin >> z; a = (r ^ x) % n; b = (c ^ x) % m; t[a][b]=true; for(int i=0; i<n; ++i){ for(int j=0; j<m; ++j){ pomoc[i][j]=false; } } bool isPath = dfs(0,0,n,m,t,pomoc); if(isPath){ cout << "NIE" << "\n"; }else{ cout << "TAK" << "\n"; t[a][b]=false; x = x ^ z; } } return 0; } |
English