Advertisement
tepyotin2

Cow XOR Path 3

Jun 23rd, 2025
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.74 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. typedef long long ll;
  6.  
  7. ll n, m, k;
  8. vector<vector<ll>> grid;
  9. map<ll, ll> freq[20][20];
  10.  
  11. void search1(ll x, ll y, ll stop, ll xv){
  12.     if(x>=n || y>=m){
  13.         return;
  14.     }
  15.     xv^=grid[x][y];
  16.     //ll nx = grid[x][y]^xv;
  17.     //xv = nx;
  18.     //cout << "x: " << x << ", y: " << y << ", xv: " << nx << '\n';
  19.     if(stop==0){
  20.         //int val = xor^grid[x][y];
  21.         freq[x][y][xv]++;
  22.         //cout << "STOP" << '\n';
  23.         //cout << "x: " << x << ", y: " << y << ", xv: " << xv << ", freq[x][y][xv]: " << freq[x][y][xv] << '\n';
  24.         return;
  25.     }
  26.     search1(x+1, y, stop-1, xv);
  27.     search1(x, y+1, stop-1, xv);
  28. }
  29.  
  30. ll search2(ll x, ll y, ll stop, ll xv){
  31.     //!!!Answer must also be able to be returned as a long long so
  32.     //search function needs to be declared using long long
  33.     if(x<0 || y<0){
  34.         return 0;
  35.     }
  36.     //cout << "x: " << x << ", y: " << y << '\n';
  37.     if(stop==0){
  38.         //cout << "STOP" << '\n';
  39.         //xv^=grid[x][y];
  40.         ll val = xv^k;
  41.         //cout << "xv: " << xv << ", val: " << val << '\n';
  42.         //cout << "val: " << val << '\n';
  43.         //int ret = 0;
  44.         if(freq[x][y].count(val)>0){
  45.             //cout << ", freq[x][y][val]: " << freq[x][y][val] << '\n';
  46.             return freq[x][y][val];
  47.         }
  48.         return 0;
  49.     }
  50.     xv^=grid[x][y];
  51.     return search2(x-1, y, stop-1, xv)+search2(x, y-1, stop-1, xv);
  52. }
  53.  
  54. int main(){
  55.     //freopen("xorpaths.in", "r", stdin);
  56.    
  57.     cin >> n >> m >> k;
  58.     grid.resize(n, vector<ll>(m));
  59.     for(ll i=0; i<n; i++){
  60.         for(ll j=0; j<m; j++){
  61.             cin >> grid[i][j];
  62.         }
  63.     }
  64.     ll tot = (n+m)-2;
  65.     ll half = tot/2;
  66.     search1(0, 0, half, 0);
  67.     //cout << "=========" << '\n';
  68.     //!!!Need to use two searches to get values and meet in the
  69.     //of the grid to prevent time limit exceeded
  70.     cout << search2(n-1, m-1, tot-half, 0) << '\n';
  71.    
  72.     return 0;
  73. }
  74.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement