题目大意:
  给你一个$n\times m(n,m\leq 500)$的格子,有一些是障碍物。从一个格子出发只能向下或向右走,有$q$组询问,每次询问从一个点是否能够到达另一个点。

思路:
  分治。
  两点间的路径必然会经过两点间的某条竖线。
  我们可以二分一个区间内中间一条线$mid$,
  对于$mid$左边的点,求出到$mid$为止往右下走能够到达的点,
  对于$mid$右边的点,求出从$mid$开始往右下走会被哪些点到达。
  这可以用bitdet来存。
  对于不经过这条竖线的路径,可以往下递归查找。
  回答询问时,只需要找到一开始选的两点之间的竖线,然后判一下一个点能到达的点和另一个点被到达的点有没有交集即可。

 #include<cstdio>
#include<cctype>
#include<bitset>
inline int getint() {
register char ch;
while(!isdigit(ch=getchar()));
register int x=ch^'';
while(isdigit(ch=getchar())) x=(((x<<)+x)<<)+(ch^'');
return x;
}
inline bool getblock() {
register char ch=getchar();
while(ch!='.'&&ch!='#') ch=getchar();
return ch=='.';
}
const int N=,logN=;
int n,m;
bool map[N][N];
std::bitset<N> f[N][N][logN],g[N][N][logN];
void solve(const int &l,const int &r,const int &k) {
if(l>r) return;
const int mid=(l+r)/;
solve(l,mid-,k+);
solve(mid+,r,k+);
for(register int i=n;i;i--) {
if(map[i][mid]) {
f[i][mid][k][i]=true;
f[i][mid][k]|=f[i+][mid][k];
}
for(register int j=mid-;j>=l;j--) {
if(map[i][j]) {
f[i][j][k]|=f[i+][j][k]|f[i][j+][k];
}
}
}
for(register int i=;i<=n;i++) {
if(map[i][mid]) {
g[i][mid][k][i]=true;
g[i][mid][k]|=g[i-][mid][k];
}
for(register int j=mid+;j<=r;j++) {
if(map[i][j]) {
g[i][j][k]|=g[i-][j][k]|g[i][j-][k];
}
}
}
}
int calc(const int &l,const int &r,const int &k,const int &y1,const int &y2) {
const int mid=(l+r)/;
if(y2<mid) return calc(l,mid-,k+,y1,y2);
if(y1>mid) return calc(mid+,r,k+,y1,y2);
return k;
}
inline bool check(const int &x1,const int &y1,const int &x2,const int &y2) {
if(x1>x2||y1>y2) return false;
const int k=calc(,m,,y1,y2);
return (f[x1][y1][k]&g[x2][y2][k]).count();
}
int main() {
n=getint(),m=getint();
for(register int i=;i<=n;i++) {
for(register int j=;j<=m;j++) {
map[i][j]=getblock();
}
}
solve(,m,);
for(register int q=getint();q;q--) {
const int x1=getint(),y1=getint(),x2=getint(),y2=getint();
puts(check(x1,y1,x2,y2)?"Yes":"No");
}
return ;
}

[CF232E]Quick Tortoise的更多相关文章

  1. cf232E. Quick Tortoise(分治 bitset dp)

    题意 题目链接 Sol 感觉这个思路还是不错的 #include<bits/stdc++.h> using namespace std; const int MAXN = 501, SS ...

  2. CF232E Quick Tortoise , Fzoj 3118

    这一题由于数据较多,我们考虑离线处理. 分治.对于两个点s,t,如果起点在mid这条横线上方,终点在下方,那么它必定会穿过mid这条线.所以只要s可以到mid上一点x,x可以到t,st就是安全的. 用 ...

  3. CodeForces 232E.Quick Tortoise

    John Doe has a field, which is a rectangular table of size n × m. We assume that the field rows are ...

  4. Codeforces 232E - Quick Tortoise bitset+分治

    题意: 思路: //By SiriusRen #include <cstdio> #include <bitset> #include <vector> using ...

  5. Solution -「CF 232E」Quick Tortoise

    \(\mathcal{Description}\)   Link.   在一张 \(n\times m\) 的网格图中有空格 . 和障碍格 #,\(q\) 次询问,每次查询从 \((x_1,y_1)\ ...

  6. [算法]——快速排序(Quick Sort)

    顾名思义,快速排序(quick sort)速度十分快,时间复杂度为O(nlogn).虽然从此角度讲,也有很多排序算法如归并排序.堆排序甚至希尔排序等,都能达到如此快速,但是快速排序使用更加广泛,以至于 ...

  7. Quick Cocos (2.2.5plus)CoinFlip解析(MenuScene display AdBar二次封装)

    转载自:http://cn.cocos2d-x.org/tutorial/show?id=1621 从Samples中找到CoinFlip文件夹,复制其中的 res 和 script 文件夹覆盖新建工 ...

  8. rsa密钥文件转化为tortoise认可的pak密钥文件

    原贴地址: http://www.vectorns.com/blog/technical-articles/1-tortoisesvn-over-ssh-on-windows-via-putty Ne ...

  9. 《Qt Quick 4小时入门》学习笔记4

    http://edu.csdn.net/course/detail/1042/14806?auto_start=1 Qt Quick 4小时入门 第七章:处理鼠标与键盘事件 1.处理鼠标事件 鼠标信号 ...

随机推荐

  1. IDEA调试快捷键

    F9            resume programe 恢复程序 F8            Step Over 相当于eclipse的f6      跳到下一步 Ctrl+Shift+F,全局查 ...

  2. FlexGrid布局

    FlexGrid布局: Grid布局时网格大小是固定的,如果想网格大小不同的界面可以使用FlexGrid布局.FlexGrid是更加灵活的Grid布局.FlexGrid布局类是wx.FlexGridS ...

  3. Edu 0空投合约源码

    https://etherscan.io/address/0xa0872ee815b8dd0f6937386fd77134720d953581#code pragma solidity ^0.4.18 ...

  4. 【bzoj3779】重组病毒 LCT+树上倍增+DFS序+树状数组区间修改区间查询

    题目描述 给出一棵n个节点的树,每一个节点开始有一个互不相同的颜色,初始根节点为1. 定义一次感染为:将指定的一个节点到根的链上的所有节点染成一种新的颜色,代价为这条链上不同颜色的数目. 现有m次操作 ...

  5. 看了就学会之React redux入门示例

    环境准备 为了方便,这里使用create-react-app搭建react环境 create-react-app mydemo 弹出配置 如果需要自定义react的配置,需要运行下面的命令把配置文件弹 ...

  6. BZOJ4552 [Tjoi2016&Heoi2016]排序 【二分 + 线段树】

    题目链接 BZOJ4552 题解 之前去雅礼培训做过一道题,\(O(nlogn)\)维护区间排序并能在线查询 可惜我至今不能get 但这道题有着\(O(nlog^2n)\)的离线算法 我们看到询问只有 ...

  7. ROS内usb_cam包使用注意事项

    1.查看摄像头支持的pixel-format: 方法:  v4l2-ctl --list-formats-ext -d /dev/video0

  8. AGC007 - C Pushing Ball

    Description 题目链接 懒得写详细题意了, 放个链接 \(n\le 2*10^5\) 个球, \(n+1\) 个坑, 排成数轴, 球坑交替. 相邻球-坑距离为等差数列 \(d\). 给定首项 ...

  9. bzoj4418 [Shoi2013]扇形面积并

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=4418 [题解] 被题目名称吓死系列. 用一棵线段树维护当前有哪些半径. 那么将扇形差分,每段 ...

  10. [转载]EasyUI中数据表格DataGrid添加排序功能

    我们这里演示的是EasyUI数据表格DataGrid从服务器端排序功能,因为觉的本地数据排序没有多大的作用,一般我们DataGrid不会读取全部数据,只会读取当前页的数据,所以本地数据排序也只是对当前 ...