题目连接:hdu_5110_Alexandra and COS

题意:

给你一个图,X代表宝藏,然后有一个船,它的声纳的频率为D,定船到宝藏的距离为Dis=max(abs(x1-x2),abs(y1-y2)),如果D是Dis的约数并且宝藏在船的上方开角45°,那么这个船就能探测到这个宝藏,现在给你q个询问,每一个询问有一个位置x,y和一个声纳的频率D,问这个船能探测到多少宝藏

题解:

因为是45°角,所以Dis实际就是abs(y1-y2),然后我们可以对每一个D,DP它45°开角满足条件的前缀和,不过对每一个D都这样做,那肯定超时,仔细想想,D越大,直接暴力搜肯定会比DP来的快,因为直接暴力我们可以每次跳D格来找,所以这里我们就要分块,一般分为sqr=sqrt(n),不过这里我亲测出数据好像当sqr=3时,跑的速度更快,然后我就直接分为D>3和D<=3来做

这里DP的方程为:设dp[i][j][k]为第i行,第j列,声纳频率为k的开角45°满足条件的前缀和,状态转移方程为dp[i][j][k]=dp[i-k][j-k][k]+dp[i-k][j+k][k]-dp[i-2*k][j][k]+第(i-k)行中[j-k,j+k]满足条件的点

(没装画图软件,画的有点丑,将就看)下面以D为2时举例,假设我们要查询x=5,y=3这个点,红色的代表满足条件的点,蓝色的线代表范围,我们可以看到粉圈内的点加了两次,所以要减掉,对应的范围就是dp[i-2*k][j][k]

 #include<cstdio>
#include<cstring>
#include<algorithm>
#define F(i,a,b) for(int i=a;i<=b;++i)
using namespace std; const int N=;
int dp[N][N][],g[N][N],n,m,q;
char in[N][N]; int main(){
while(~scanf("%d%d%d",&n,&m,&q)){
F(i,,n)scanf("%s",in[i]+);
F(i,,n)F(j,,m)g[i][j]=g[i][j-]+(in[i][j]=='X');
for(int i=,*p,kk;i<=n;++i)F(j,,m)F(k,,){
p=&dp[i][j][k],*p=(in[i][j]=='X'),kk=k<<;
if(i>k){
if(j>k)*p+=dp[i-k][j-k][k]+g[i-k][j]-g[i-k][j-k];
else{
*p+=g[i-k][j];
if(i>kk)*p+=dp[i-kk][j][k]+g[i-kk][j-];
}
if(j+k<=m)*p+=dp[i-k][j+k][k]+g[i-k][j+k-]-g[i-k][j];
else{
*p+=g[i-k][m]-g[i-k][j];
if(i>kk)*p+=dp[i-kk][j][k]+g[i-kk][m]-g[i-kk][j];
}
if(i>kk)*p-=dp[i-kk][j][k];
}
}
for(int i=,c,r,w,ret;i<=q;i++){
scanf("%d%d%d",&r,&c,&w);
if(w>){
ret=;
for(int j=r,lf=c,rt=c;j>;j-=w,lf=max(lf-w,),rt=min(m,rt+w))
ret+=g[j][rt]-g[j][lf-];
printf("%d\n",ret);
}else printf("%d\n",dp[r][c][w]);
}
}
return ;
}

hdu_5110_Alexandra and COS(DP+分块思想)的更多相关文章

  1. LOJ 2743(洛谷 4365) 「九省联考 2018」秘密袭击——整体DP+插值思想

    题目:https://loj.ac/problem/2473 https://www.luogu.org/problemnew/show/P4365 参考:https://blog.csdn.net/ ...

  2. Codeforces Round #319 (Div. 1)C. Points on Plane 分块思想

                                                                              C. Points on Plane On a pl ...

  3. POJ 1947 Rebuilding Roads (树dp + 背包思想)

    题目链接:http://poj.org/problem?id=1947 一共有n个节点,要求减去最少的边,行号剩下p个节点.问你去掉的最少边数. dp[u][j]表示u为子树根,且得到j个节点最少减去 ...

  4. Codeforces Round #355 (Div. 2) D. Vanya and Treasure dp+分块

    题目链接: http://codeforces.com/contest/677/problem/D 题意: 让你求最短的从start->...->1->...->2->. ...

  5. ZOJ 1654 Place the Robots建图思维(分块思想)+二分匹配

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=654 AC一百道水题,不如AC一道难题来的舒服. 题意:一个n*m地图 ...

  6. UVA 10891 区间DP+博弈思想

    很明显带有博弈的味道.让A-B最大,由于双方都采用最佳策略,在博弈中有一个要求时,让一方的值尽量大.而且由于是序列,所以很容易想到状态dp[i][j],表示序列从i到j.结合博弈中的思想,表示初始状态 ...

  7. PAT1057 stack(分块思想)

    1057 Stack (30分)   Stack is one of the most fundamental data structures, which is based on the princ ...

  8. HDOJ 4858 项目管理 ( 只是有点 莫队的分块思想在里面而已啦 )

    题目: 链接:http://acm.hdu.edu.cn/showproblem.php?pid=4858 题意: 我们建造了一个大项目!这个项目有n个节点,用很多边连接起来,并且这个项目是连通的! ...

  9. 莫队算法 sqrt(n)分块思想

    在此说一下本渣对莫队算法思想的一些浅薄理解 莫队算法的思想就是对真个区间的分块,然后按照每块来分别进行计算,这样最终的复杂度可以达到n*sqrt(n) 小Z的袜子是一道非常经典的题目.:题目链接htt ...

随机推荐

  1. Zookeeper 启动错误

    启动后日志如下 : 2016-09-14 05:51:19,449 [myid:1] - INFO [QuorumPeer[myid=1]/0:0:0:0:0:0:0:0:2181:FastLeade ...

  2. vs打开项目,创建虚拟目录,提示权限不足无法写入配置文件

    如题,从源代码管理器上获取下来程序后,自己打开始,提示如题,尝试过以管理员启动vs,给目录权限提升,修改csproj项目配置文件(修改userIIS节点)and so on,无意间在用别的文档编辑器编 ...

  3. drupal7的node的内容的存储位置

    标题是存在node表中的,但是实际内容存在表field_data_body中

  4. Ztree手风琴效果(第三版)

    第一版:点击一级目录展开,再点击时不能收回 第二版:点击一级目录展开,再点击时可以收回 第三版:优化样式,修复主菜单下的子菜单下级无子节点时点击无反应问题(js报错) <%@ page lang ...

  5. SpringMvc处理post请求乱码的filter

    <filter>         <filter-name>encodingFilter</filter-name>         <filter-clas ...

  6. Ubuntu+Django+mod_wsgi+Apache配置过程

    Ubuntu15.10 Apache2.4( sudo apt-get install apache2 ) Python3.4( sudo apt-get install apache2 ),  [系 ...

  7. Cv图像处理

    http://wiki.opencv.org.cn/index.php/Cv%E5%9B%BE%E5%83%8F%E5%A4%84%E7%90%86 看看知识点,虽然是C 版本.

  8. view视图--display中echo出ob_get_contents的缓冲内容--(实现,拼接好文件--导入文件)

    view.php01默认设置有3个公共的属性,其他属性.后面实例化的时候.通过传递参数.foreach遍历,不断的增加属性02view对象的实例化.位置在-->控制器父类的构造方法中视图的目录名 ...

  9. 第5章 字符串----char与String

    1.java有8种基本数据类型: 数值型:整数类型(byte,short,int,long) :浮点类型(float,double) 字符型:char  布尔型:true,false 2.char:  ...

  10. 用 openSSL 生成 公钥 私钥

    支付宝app接口需要 RSA加密通讯 https://doc.open.alipay.com/doc2/detail?treeId=58&articleId=103242&docTyp ...