jzoj1753-锻炼身体【单调队列】
正题
题目大意
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-锻炼身体【单调队列】相关推荐
- bzoj2500幸福的道路 树形dp+单调队列
2500: 幸福的道路 Time Limit: 20 Sec Memory Limit: 256 MB Submit: 434 Solved: 170 [Submit][Status][Discu ...
- 单调队列多重背包时间复杂度O(vn)
版权声明:本文为博主原创文章,未经博主允许不得转载. 多重背包问题: 有N种物品和容量为V的背包,若第i种物品,容量为v[i],价值为w[i],共有n[i]件.怎样装才能使背包内的物品总价值最大? 网 ...
- 洛谷 P2219修筑绿化带 二维单调队列~
题目链接:https://www.luogu.org/problem/P2219 emmm调了一个上午+中午,fan 题意:从N*M的中找到一个a*b的大矩形和减去a*b中的一个与之不重边界的c*d的 ...
- P2216 理想的正方形 单调队列 (二维)
题目链接:https://www.luogu.org/problem/P2216 题意:求给定n*m的矩形中所有k*k的正方形块中最大值最小值之差(极差)最小 哇,大神的思路真的很帅 单调队列对每一行 ...
- 点分治问题 ----------- luoguP2942 [WC2010]重建计划 [点分治 + bfs + 单调队列 + 预处理建树 + 二分 + 01分数规划]
题目链接 解题思路: 1.对于这个Avgvalue=∑e∈sv(e)∣s∣Avgvalue = \frac{\sum_{e\in s}v(e)}{|s|}Avgvalue=∣s∣∑e∈sv(e) ...
- 解题报告:Fake Maxpooling(单调队列求矩阵的和)
我们不妨先把这个问题中二维的矩阵简化成一维的数列.那么现在的问题就变成了一个求连续的滑动窗口最值问题:给出一个长度为n的数列和一个长度为k(k<n)的窗口,记录滑动窗口位于每个位置下的下的最大值 ...
- 0x12.基本数据结构 — 队列与单调队列
目录 一.队列 0.UVA540 团体队列 Team Queue 1.AcWing 133. 蚯蚓(模拟优先队列) 二 .单调队列 0.AcWing 135. 最大子序和(单调队列) 1.luogu ...
- 【题解】P1419 寻找段落(二分+单调队列)难度⭐⭐⭐★
P1419 寻找段落 首先二分答案,即:二分最大平均值. 我们将a全部减去mid,问题转化为判断是否存在一个长度在s~t范围内的区间它的和为正,如果有说明还有更大的平均值. 用前缀和和单调队列维护. ...
- 【数据结构】单调栈和单调队列 详解+例题剖析
算法:单调栈和单调队列 一.单调栈和单调队列 二.单调栈例题 1.模板题入门 2.不懂不要急,看这道题 三.单调队列例题 1.入门 2.进阶 一.单调栈和单调队列 单调栈和单调队列与普通的栈,队列不同 ...
最新文章
- jqgrid ajax 请求参数,如何将csrf_令牌传递给jqgrid的editurl的post参数?
- 《Java语言导学(原书第6版)》一一1.5 问题和练习:快速入门
- 《Saas模式云原生数据仓库应用场景实践》激活数据生产力,让分析产生价值
- 【CF1182D】Complete Mirror【树的重心】
- HH SaaS电商系统的商品营销角标功能模块设计
- 统计一个整数的所有因子的个数_【题解循环嵌套】1095:数1的个数
- 机器学习之特征工程-特征选择
- 一加将于10月14日推出新款Buds系列真无线耳塞
- redis多服务器共享_基于redis和shedlock实现分布式锁(超简单)
- 201409-2-画图
- PAT甲题题解-1077. Kuchiguse (20)-找相同后缀
- MIMO技术中的各种增益分析
- 公主救骑士---地下城游戏_leetcode
- 你到底是想做产品,还是想做产品经理?
- Docker搭建snipe-it全步骤
- Sherlock之Instructions指令介绍(Sherlock Version: 7.2.5.1 64-bit)
- 景观廊架---廊架景观
- ZBrush笔刷整理大合集
- PCIE ARI技术
- 信息学奥赛一本通(C++版)continue
热门文章
- python 实现点击右键用某个程序打开功能_工欲善其事,必先利其器(1)——Python开发环境安装与配置...
- cheatengine找不到数值_“不会找问题”,只配在底层,最高效的思维方式导图,人生开挂!...
- 下列选项中 采用边界值平滑_数据挖掘期末考题(答案).doc
- 在c语言程序中将数据分为两种,2012年计算机二级C语言考点归纳汇总(一至四章)...
- 复旦计算机考研英语,2020考研复旦计算机专硕392经验贴
- easyui 动态设置单元格控件_动态显示最大最小值的折线图
- 算法题目——整数划分(HRBUST-2004)
- leetcode637. 二叉树的层平均值(层序遍历04)
- webpack入门核心知识还看不过瘾?速来围观万字入门进阶知识
- [Redis6]NoSQL数据库简介_特点