#32 RE 求调。
查看原帖
#32 RE 求调。
1296826
lcfollower楼主2024/7/5 08:37

rt,谢谢。

#include<bits/stdc++.h>
#define int long long
#define db double
#define _Dark_Star exit(0)
#define inf 0x3f3f3f3f
#define infi 0x3f3f3f3f3f3f3f3fll
#define up(i,x,y) for(register int i=x;i<=y;++i)
#define dn(i,x,y) for(register int i=x;i>=y;--i)
using namespace std;
inline int read(){int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9')x=(x<<1)+(x<<3)+(ch^48),ch=getchar();return x*f;}
inline void write(int x){if(x<0)putchar('-'),x=-x;if(x>9)write(x/10);putchar(x%10|48);}
inline void writeln(int x){write(x),putchar('\n');}
inline void writesp(int x){write(x),putchar(' ');}
#define min(a ,b) a < b ? a : b

const int N = 30;
int n , m, p ,a[N][N] ,ans;
map <int ,int> tot[N][N];

inline void dfs1(int x,int y,int sum){
  sum ^= a[x][y];
  if(x + y == (n + m) / 2 + 1){tot[x][y][sum] ++;return;}
  dfs1(x + 1 ,y ,sum);
  dfs1(x , y + 1,sum);
} inline void dfs2(int x,int y,int sum){
  if(x + y == (n + m) / 2 + 1){ans += tot[x][y][sum ^ p];return;}
  sum ^= a[x][y];
  dfs2(x - 1,y ,sum);
  dfs2(x ,y - 1,sum);
} signed main(){
  n = read() , m = read() , p = read();
  up(i,1,n) up(j,1,m) a[i][j] = read();
  dfs1(1,1,0);
  dfs2(n,m,0);
  writeln(ans);
  _Dark_Star;
}
2024/7/5 08:37
加载中...