T11题解
2025-01-21 10:41:15
发布于:上海
#include<iostream>
#include<map>
#include<algorithm>
using namespace std;
typedef long long int ll;
const int MAXN=30;
ll n,m,k,ans;
ll school[MAXN][MAXN];
bool go[MAXN][MAXN];
map<ll,ll>sum[MAXN][MAXN];
void work(int x,int y,int t){
ll money=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(go[i][j]){
money^=school[i][j];
}
}
}
if(t==2){
money^=school[x][y];
ans+=sum[x][y][money^k];
}
else
sum[x][y][money]++;
}
void dfs1(int x,int y){
if(x+y==m+1){
work(x,y,1);
return ;
}
go[x+1][y]=1;
dfs1(x+1,y);
go[x+1][y]=0;
go[x][y+1]=1;
dfs1(x,y+1);
go[x][y+1]=0;
}
void dfs2(int x,int y){
if(x+y==m+1){
work(x,y,2);
return ;
}
go[x-1][y]=1;
dfs2(x-1,y);
go[x-1][y]=0;
go[x][y-1]=1;
dfs2(x,y-1);
go[x][y-1]=0;
}
int main(){
cin>>n>>m>>k;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>school[i][j];
}
}
go[1][1]=1;
dfs1(1,1);
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
go[i][j]=0;
}
}
go[n][m]=1;
dfs2(n,m);
cout<<ans;
return 0;
}
这里空空如也
有帮助,赞一个