[CodeForces]1006F Xor Path

双向搜索。
水div3的时候最后一道题由于C题死活看不懂题 来不及做F了Orz。。
因为n,m是20,双向搜索一下,求个到中间的Xor值的方案,统计一下即可。
时间复杂度(O(2^{21}))
好好学习英语,readforces。。。

#include <bits/stdc++.h>
using namespace std;
int n,m;
long long k,g[55][55],ans,mid;
map<long long,long long> cnt[22][22];
void dfs1(int x,int y,long long sum) {

	if(x+y>mid+1) return;
	if(x>n||y>m) return;
	sum^=g[x][y];
	cnt[x][y][sum]++;
	dfs1(x+1,y,sum);
	dfs1(x,y+1,sum);
}
void dfs2(int x,int y,long long sum) {
	if(x<1||y<1) return;
	if(x+y<=mid+1) {
		ans+=cnt[x][y][sum^k];
		return;
	}
	sum^=g[x][y];
	dfs2(x-1,y,sum);
	dfs2(x,y-1,sum);
}
int main() {
	scanf("%d%d%lld",&n,&m,&k);
	mid=n+m>>1;
	for(int i=1; i<=n; i++)
		for(int j=1; j<=m; j++)
			scanf("%lld",&g[i][j]);
	dfs1(1,1,0);
	dfs2(n,m,0);
	cout<<ans;
}
我是咸鱼。转载博客请征得博主同意Orz
原文地址:https://www.cnblogs.com/sdfzhsz/p/9338573.html