正题


题目大意

n∗mn*mn∗m的有障碍物的网格,开始在(xs,ys)(x_s,y_s)(xs​,ys​)。有kkk段时间网格会倾斜,对于倾斜的方向可以选择移动或者不移动,求最长移动距离。


解题思路

因为每段时间方向唯一,所以我们对于每一列或每一行分开计算,有转移fi=fj+i−j(i−j≤t)f_i=f_j+i-j(i-j\leq t)fi​=fj​+i−j(i−j≤t)

然后单调队列转移即可,时间复杂度O(nmk)O(nmk)O(nmk)


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
const int N=210;
struct node{int s,t,w;
}a[N];
int n,m,sx,sy,k,f[N][N],s[N];
char v[N][N];
deque<int> q;
bool cmp(node x,node y)
{return x.s<y.s;}
int main()
{scanf("%d%d%d%d%d",&n,&m,&sx,&sy,&k);for(int i=1;i<=n;i++)scanf("%s",v[i]+1);for(int i=1;i<=k;i++)scanf("%d%d%d",&a[i].s,&a[i].t,&a[i].w);memset(f,0xcf,sizeof(f));s[0]=s[n+1]=-2147483647/3; sort(a+1,a+1+k,cmp);f[sx][sy]=0;for(int p=1;p<=k;p++){int l=a[p].t-a[p].s+1;if(a[p].w==1){for(int j=1;j<=m;j++){while(!q.empty())q.pop_back();q.push_back(0);for(int i=n,fr=0;i>=1;i--,fr++){if(v[i][j]=='x'){while(!q.empty())q.pop_back();continue;}while(!q.empty()&&s[q.back()]+fr<=f[i][j])q.pop_back();s[i]=f[i][j]-fr;q.push_back(i);while(q.front()-i>l)q.pop_front();f[i][j]=s[q.front()]+fr;}}}else if(a[p].w==2){for(int j=1;j<=m;j++){while(!q.empty())q.pop_back();q.push_back(n+1);for(int i=1,fr=0;i<=n;i++,fr++){if(v[i][j]=='x'){while(!q.empty())q.pop_back();continue;}while(!q.empty()&&s[q.back()]+fr<=f[i][j])q.pop_back();s[i]=f[i][j]-fr;q.push_back(i);while(i-q.front()>l)q.pop_front();f[i][j]=s[q.front()]+fr;}}}else if(a[p].w==3){for(int i=1;i<=n;i++){while(!q.empty())q.pop_back();q.push_back(0);for(int j=m,fr=0;j>=1;j--,fr++){if(v[i][j]=='x'){while(!q.empty())q.pop_back();continue;}while(!q.empty()&&s[q.back()]+fr<=f[i][j])q.pop_back();s[j]=f[i][j]-fr;q.push_back(j);while(q.front()-j>l)q.pop_front();f[i][j]=s[q.front()]+fr;}}}else if(a[p].w==4){for(int i=1;i<=n;i++){while(!q.empty())q.pop_back();q.push_back(n+1);for(int j=1,fr=0;j<=m;j++,fr++){if(v[i][j]=='x'){while(!q.empty())q.pop_back();continue;}while(!q.empty()&&s[q.back()]+fr<=f[i][j])q.pop_back();s[j]=f[i][j]-fr;q.push_back(j);while(j-q.front()>l)q.pop_front();f[i][j]=s[q.front()]+fr;}}}}int ans=0;for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)ans=max(ans,f[i][j]);printf("%d",ans);
}

jzoj1753-锻炼身体【单调队列】相关推荐

  1. bzoj2500幸福的道路 树形dp+单调队列

    2500: 幸福的道路 Time Limit: 20 Sec  Memory Limit: 256 MB Submit: 434  Solved: 170 [Submit][Status][Discu ...

  2. 单调队列多重背包时间复杂度O(vn)

    版权声明:本文为博主原创文章,未经博主允许不得转载. 多重背包问题: 有N种物品和容量为V的背包,若第i种物品,容量为v[i],价值为w[i],共有n[i]件.怎样装才能使背包内的物品总价值最大? 网 ...

  3. 洛谷 P2219修筑绿化带 二维单调队列~

    题目链接:https://www.luogu.org/problem/P2219 emmm调了一个上午+中午,fan 题意:从N*M的中找到一个a*b的大矩形和减去a*b中的一个与之不重边界的c*d的 ...

  4. P2216 理想的正方形 单调队列 (二维)

    题目链接:https://www.luogu.org/problem/P2216 题意:求给定n*m的矩形中所有k*k的正方形块中最大值最小值之差(极差)最小 哇,大神的思路真的很帅 单调队列对每一行 ...

  5. 点分治问题 ----------- luoguP2942 [WC2010]重建计划 [点分治 + bfs + 单调队列 + 预处理建树 + 二分 + 01分数规划]

    题目链接 解题思路: 1.对于这个Avgvalue=∑e∈sv(e)∣s∣Avgvalue = \frac{\sum_{e\in s}v(e)}{|s|}Avgvalue=∣s∣∑e∈s​v(e)​ ...

  6. 解题报告:Fake Maxpooling(单调队列求矩阵的和)

    我们不妨先把这个问题中二维的矩阵简化成一维的数列.那么现在的问题就变成了一个求连续的滑动窗口最值问题:给出一个长度为n的数列和一个长度为k(k<n)的窗口,记录滑动窗口位于每个位置下的下的最大值 ...

  7. 0x12.基本数据结构 — 队列与单调队列

    目录 一.队列 0.UVA540 团体队列 Team Queue 1.AcWing 133. 蚯蚓(模拟优先队列) 二 .单调队列 0.AcWing 135. 最大子序和(单调队列) 1.luogu ...

  8. 【题解】P1419 寻找段落(二分+单调队列)难度⭐⭐⭐★

    P1419 寻找段落 首先二分答案,即:二分最大平均值. 我们将a全部减去mid,问题转化为判断是否存在一个长度在s~t范围内的区间它的和为正,如果有说明还有更大的平均值. 用前缀和和单调队列维护. ...

  9. 【数据结构】单调栈和单调队列 详解+例题剖析

    算法:单调栈和单调队列 一.单调栈和单调队列 二.单调栈例题 1.模板题入门 2.不懂不要急,看这道题 三.单调队列例题 1.入门 2.进阶 一.单调栈和单调队列 单调栈和单调队列与普通的栈,队列不同 ...

最新文章

  1. jqgrid ajax 请求参数,如何将csrf_令牌传递给jqgrid的editurl的post参数?
  2. 《Java语言导学(原书第6版)》一一1.5 问题和练习:快速入门
  3. 《Saas模式云原生数据仓库应用场景实践》激活数据生产力,让分析产生价值
  4. 【CF1182D】Complete Mirror【树的重心】
  5. HH SaaS电商系统的商品营销角标功能模块设计
  6. 统计一个整数的所有因子的个数_【题解循环嵌套】1095:数1的个数
  7. 机器学习之特征工程-特征选择
  8. 一加将于10月14日推出新款Buds系列真无线耳塞
  9. redis多服务器共享_基于redis和shedlock实现分布式锁(超简单)
  10. 201409-2-画图
  11. PAT甲题题解-1077. Kuchiguse (20)-找相同后缀
  12. MIMO技术中的各种增益分析
  13. 公主救骑士---地下城游戏_leetcode
  14. 你到底是想做产品,还是想做产品经理?
  15. Docker搭建snipe-it全步骤
  16. Sherlock之Instructions指令介绍(Sherlock Version: 7.2.5.1 64-bit)
  17. 景观廊架---廊架景观
  18. ZBrush笔刷整理大合集
  19. PCIE ARI技术
  20. 信息学奥赛一本通(C++版)continue

热门文章

  1. python 实现点击右键用某个程序打开功能_工欲善其事,必先利其器(1)——Python开发环境安装与配置...
  2. cheatengine找不到数值_“不会找问题”,只配在底层,最高效的思维方式导图,人生开挂!...
  3. 下列选项中 采用边界值平滑_数据挖掘期末考题(答案).doc
  4. 在c语言程序中将数据分为两种,2012年计算机二级C语言考点归纳汇总(一至四章)...
  5. 复旦计算机考研英语,2020考研复旦计算机专硕392经验贴
  6. easyui 动态设置单元格控件_动态显示最大最小值的折线图
  7. 算法题目——整数划分(HRBUST-2004)
  8. leetcode637. 二叉树的层平均值(层序遍历04)
  9. webpack入门核心知识还看不过瘾?速来围观万字入门进阶知识
  10. [Redis6]NoSQL数据库简介_特点