题目大意:
  给你一个$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. Heat 如何来实现和支持编排

    编排 编排,顾名思义,就是按照一定的目的依次排列.在 IT 的世界里头,一个完整的编排一般包括设置服务器上机器.安装 CPU.内存.硬盘.通电.插入网络接口.安装操作系统.配置操作系统.安装中间件.配 ...

  2. 【志银】MySQL命令总结

    ===0-MySQL密码设置===0.1-登入和进入MySQL数据库: 0.1.1-登入MySQL数据库:C:\Users\Administrator>mysql -u用户名 -hMySQL服务 ...

  3. Opencv4.0.0安装包

    这个资源是Opencv4.0.0安装包,包括Windows软件包,Android软件包,IOS软件包,还有opencv的源代码:需要的下载吧. 点击下载

  4. pytorch版本问题:AttributeError: 'module' object has no attribute '_rebuild_tensor_v2'

    用pytorch加载训练好的模型的时候遇到了如下的问题: AttributeError: 'module' object has no attribute '_rebuild_tensor_v2' 到 ...

  5. cinatra--一个高效易用的c++ http框架

    cinatra是一个高性能易用的http框架,它是用modern c++(c++17)开发的,它的目标是提供一个快速开发的c++ http框架.它的主要特点如下: 统一而简单的接口 header-on ...

  6. js万年历

    首先,注意: 1.延迟执行     window.setTimeout(    ,     )     里面的时间是以毫秒计算的 2.间隔执行    window.setInterval(     , ...

  7. 2017 多校4 Dirt Ratio

    多校4 Dirt Ratio(二分+线段树) 题意: 给出n个数,找一段区间使得区间内不同数字个数除以区间长度最小,求这个最小值,\(n<=60000,a_i<=n\) 题解: 二分答案m ...

  8. [网络流24题] COGS 750 栅格网络流

    750. 栅格网络流 ★★☆   输入文件:flowa.in   输出文件:flowa.out   简单对比时间限制:1 s   内存限制:128 MB [问题描述] Bob 觉得一般图的最大流问题太 ...

  9. yii 用户登录验证(cwebuser) yii 用户登录 (记)

    yii 的确是一个强大而臃肿的框架,简单的小项目,或者只做后台接口调用的项目,建议不要用. 今天记录一下yii使用中cwebuser(Yii::app()->user->login())登 ...

  10. CString和string在unicode与非unicode下的相互转换(转)

    原文转自 http://blog.csdn.net/u014303844/article/details/51397556 CString和string在unicode与非unicode下的相互转换 ...