题意略。

思路:

双向bfs。

如图,对于曼哈顿距离为5的地方来说,除去两端的位置,其他位置的状态不会超过曼哈顿距离为4的地方的状态的两倍。

所以,最大曼哈顿距离为n + m。最多的状态不过2 ^ (n + m)。

这个复杂度我们不能接受,但是如果我们从两边向中间bfs的话, 每次bfs的复杂度为2 ^ ((n + m)/2)。

所以可以用双向广搜来解决。

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int maxn = ; struct point{
int x,y;
LL state;
point(int a = ,int b = ){
x = a,y = b;
}
point operator+ (const point& p){
return point(x + p.x,y + p.y);
}
int sum(){
return x + y;
}
bool operator< (const point& p) const{
if(x != p.x) return x < p.x;
else if(y != p.y) return y < p.y;
else return state < p.state;
}
}; point mov1[] = {point(,),point(,)};
point mov2[] = {point(-,),point(,-)}; LL board[maxn][maxn];
LL n,m,k;
map<point,LL> mp; void bfs1(point s){
int line = ((n + m)>>) + ;
s.state = board[s.x][s.y];
queue<point> que;
que.push(s);
while(que.size()){
point temp = que.front();
que.pop();
if(temp.sum() == line){
++mp[temp];
continue;
}
for(int i = ;i < ;++i){
point nxt = temp + mov1[i];
if(nxt.x > n || nxt.y > m) continue;
nxt.state = temp.state xor board[nxt.x][nxt.y];
que.push(nxt);
}
}
}
LL bfs2(point s){
LL ret = ;
int line = ((n + m)>>) + ;
s.state = k xor board[s.x][s.y];
queue<point> que;
que.push(s);
while(que.size()){
point temp = que.front();
que.pop();
if(temp.sum() == line){
ret += mp[temp];
continue;
}
for(int i = ;i < ;++i){
point nxt = temp + mov2[i];
if(nxt.x < || nxt.y < ) continue;
nxt.state = temp.state xor board[nxt.x][nxt.y];
que.push(nxt);
}
}
return ret;
} int main(){
scanf("%lld%lld%lld",&n,&m,&k);
for(int i = ;i <= n;++i){
for(int j = ;j <= m;++j){
scanf("%lld",&board[i][j]);
}
}
bfs1(point(,));
int line = ((n + m)>>) + ;
for(int i = ;i <= n;++i){
int j = line - i;
if(j <= ) continue;
board[i][j] = ;
}
LL ans = bfs2(point(n,m));
printf("%lld\n",ans);
return ;
}

Codeforces 1006F的更多相关文章

  1. [CodeForces]1006F Xor Path

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

  2. CodeForces - 1006F (深搜从两端向中间搜,省时)

    题意:输入n,m,k,给出一个n*m的图,里面有权值,从1,1一路异或到n,m,只能向右或向下走,等于k有多少种路径. 思路:一开始就是直接暴力写个深搜,稳稳的超时,分析一下时间复杂度.每个点有两个方 ...

  3. python爬虫学习(5) —— 扒一下codeforces题面

    上一次我们拿学校的URP做了个小小的demo.... 其实我们还可以把每个学生的证件照爬下来做成一个证件照校花校草评比 另外也可以写一个物理实验自动选课... 但是出于多种原因,,还是绕开这些敏感话题 ...

  4. 【Codeforces 738D】Sea Battle(贪心)

    http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...

  5. 【Codeforces 738C】Road to Cinema

    http://codeforces.com/contest/738/problem/C Vasya is currently at a car rental service, and he wants ...

  6. 【Codeforces 738A】Interview with Oleg

    http://codeforces.com/contest/738/problem/A Polycarp has interviewed Oleg and has written the interv ...

  7. CodeForces - 662A Gambling Nim

    http://codeforces.com/problemset/problem/662/A 题目大意: 给定n(n <= 500000)张卡片,每张卡片的两个面都写有数字,每个面都有0.5的概 ...

  8. CodeForces - 274B Zero Tree

    http://codeforces.com/problemset/problem/274/B 题目大意: 给定你一颗树,每个点上有权值. 现在你每次取出这颗树的一颗子树(即点集和边集均是原图的子集的连 ...

  9. CodeForces - 261B Maxim and Restaurant

    http://codeforces.com/problemset/problem/261/B 题目大意:给定n个数a1-an(n<=50,ai<=50),随机打乱后,记Si=a1+a2+a ...

随机推荐

  1. springboot-权限控制shiro(一)

    1. 场景描述 (1)权限控制是IT项目特别是企业项目,绕不开的重要模块,接下来结合springboot介绍下权限控制框架shiro. (2)springboot集成shiro的东西有点多,一篇博客完 ...

  2. phpcms V9 常用的调用标签

    本文介绍phpcms v9中模板标签使用说明. >>调用根目录下phpcms\template\content\header文件 {template "content" ...

  3. 《SQL错题》

    (选择一项) A: B: C: D: 正确答案是 D                   (选择一项) A: B: C: D: 正确答案是 A           (选择一项) 8 A: B: C: ...

  4. bean的创建(五)第五部分 属性填充

    AbstractAutowireCapableBeanFactory.populateBean protected void populateBean(String beanName, RootBea ...

  5. 浅析scrapy与scrapy_redis区别

    最近在工作中写了很多 scrapy_redis 分布式爬虫,但是回想 scrapy 与 scrapy_redis 两者区别的时候,竟然,思维只是局限在了应用方面,于是乎,搜索了很多相关文章介绍,这才搞 ...

  6. SQL注入详解及技巧

    Tip小技巧 :在白盒测试的过程中,在sql语句的下一句加上 echo $sql. '<br>'; 可以在页面中输出完整的sql语句 效果图 :

  7. 用机智云做PWM占空比控制电机,物联网智能家居应用

      因为是新申请的博客,所以申请了总想往里面加点东西,所以把我之前在机智云写的帖子复制了过来 (各位抱歉,由于之前上传的文件可能有错误,之前上传的文件PWM不能用,那么我又重新上传了一个文件,这个文件 ...

  8. windows下hexo+github搭建个人博客

    网上利用hexo搭建博客的教程非常多,大部分内容都大同小异,选择一篇合适的参考,跟着一步一步来即可. 但是,很多博客由于发布时间较为久远等问题,其中某些操作在现在已不再适用,从而导致类似于我这样的小白 ...

  9. Java代码计算运行时间

    突然想准确的测试一下Java代码的执行时间,在网上找了一会.发现基本有以下两种方法:第一种是以毫秒为单位计算的. Java代码 //伪代码 long startTime=System.currentT ...

  10. DesignPattern系列__05开闭原则

    介绍 开闭原则是编程设计中最基本.最重要的原则. 定义:一个软件实体如类.方法和模块等,应该对扩展(提供方)开放,对修改(使用方)关闭.用抽象构建框架,用实现扩展细节. 也就是说,在需求发生新的变化时 ...