#include <bits/stdc++.h> using namespace std; #define endl '\n' set < pair < int,int> > zbior; #define sandom_rhuffle rhandom_suffle int n,m; bool czyburz (int row, int col, set < pair <int, int> > zb, bool vis[]) { if (vis[m * row + col]){ return true; } if (row == n - 1 && col == m - 1){ return false; } vis[m * row + col] = true; pair <int, int> p1; p1.first = row; p1.second = col; if (zb.find(p1) != zb.end()){ return true; } bool rd, rr, dn = false, rt = false; ++(p1.first); if (zb.find(p1) != zb.end()){ dn = true; } if (row < n - 1){ rd = czyburz (row+1, col, zb, vis); } else{ rd = true; } if (rd || dn){ --(p1.first); ++(p1.second); if (zb.find(p1) != zb.end()){ rt = true; } if (col < m - 1){ rr = czyburz (row, col+1, zb, vis); } else{ rr = true; } if ((dn && rt) || (rd && rr)){ return true; } } return false; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int k,x=0; cin>>n>>m>>k; int r[k],c[k],z[k]; for(int i = 0; i < k; ++i){ cin>>r[i]; cin>>c[i]; cin>>z[i]; } for(int i = 0; i < k; ++i){ bool vis[25000009] = {false}; pair <int,int> p2; p2.first=(r[i]^x)%n; p2.second=(c[i]^x)%m; zbior.insert(p2); bool burz=czyburz(0,0,zbior,vis); if(burz){ x=x^z[i]; zbior.erase(p2); cout<<"TAK"<<endl; } else{ cout<<"NIE"<<endl; } } 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 | #include <bits/stdc++.h> using namespace std; #define endl '\n' set < pair < int,int> > zbior; #define sandom_rhuffle rhandom_suffle int n,m; bool czyburz (int row, int col, set < pair <int, int> > zb, bool vis[]) { if (vis[m * row + col]){ return true; } if (row == n - 1 && col == m - 1){ return false; } vis[m * row + col] = true; pair <int, int> p1; p1.first = row; p1.second = col; if (zb.find(p1) != zb.end()){ return true; } bool rd, rr, dn = false, rt = false; ++(p1.first); if (zb.find(p1) != zb.end()){ dn = true; } if (row < n - 1){ rd = czyburz (row+1, col, zb, vis); } else{ rd = true; } if (rd || dn){ --(p1.first); ++(p1.second); if (zb.find(p1) != zb.end()){ rt = true; } if (col < m - 1){ rr = czyburz (row, col+1, zb, vis); } else{ rr = true; } if ((dn && rt) || (rd && rr)){ return true; } } return false; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int k,x=0; cin>>n>>m>>k; int r[k],c[k],z[k]; for(int i = 0; i < k; ++i){ cin>>r[i]; cin>>c[i]; cin>>z[i]; } for(int i = 0; i < k; ++i){ bool vis[25000009] = {false}; pair <int,int> p2; p2.first=(r[i]^x)%n; p2.second=(c[i]^x)%m; zbior.insert(p2); bool burz=czyburz(0,0,zbior,vis); if(burz){ x=x^z[i]; zbior.erase(p2); cout<<"TAK"<<endl; } else{ cout<<"NIE"<<endl; } } return 0; } |