ssoj1338蜘蛛侠 trampolin
来源:互联网 发布:杂志排版设计软件 编辑:程序博客网 时间:2024/04/29 15:12
题意:有n栋高楼,一个人从第k栋开始跳,每次只能跳到相邻的左右两个房子。有些房子上有蹦床,可以跳到任意高度任意位置的房子。问从k最多能跳几个房子。
思路:1、一路上不会碰到蹦床,求个最长单调不增+反向等高就行。
2、会碰到蹦床:发现碰到一个蹦床就可以到达任意的蹦床,又发现跳到一个蹦床,所有蹦床能到达的区域就都能到达。蹦床能到达的区域:相邻向左向右最长不降。ans=蹦床区域+路上最长单调的非蹦床区域。
#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <algorithm>using namespace std;const int maxn=300005;int h[maxn],n,k,ans=0,sum;bool f[maxn];char s[maxn];inline int get(){ char c;bool flag=0;while(!isdigit(c=getchar()))if(c=='-')flag=1; int v=c-48;while(isdigit(c=getchar()))v=v*10+c-48;if(flag)v=-v; return v;}int main(){ n=get();k=get(); memset(f,0,sizeof(f)); for(int i=1;i<=n;++i)h[i]=get(); scanf("%s",s+1); for(int i=1;i<=n;++i){ if(s[i]=='T'){ f[i]=1; int j=i-1; while(j && h[j]>=h[j+1])f[j]=1,--j; j=i+1; while(j<=n && h[j]>=h[j-1])f[j]=1,++j;}}if(f[k]){sum=0;f[0]=f[n+1]=1; for(int i=1;i<=n;++i){ if(f[i]){sum=0;continue;} if(f[i-1] || h[i]<=h[i-1])++sum;else sum=1;ans=max(ans,sum);}sum=0;for(int i=n;i>=1;--i){ if(f[i]){sum=0;continue;} if(f[i+1] || h[i]<=h[i+1])++sum;else sum=1;ans=max(ans,sum);}for(int i=1;i<=n;++i)ans+=f[i];}else{ int l=k-1,r=k+1; while(l && h[l]<=h[l+1])--l;++l; while(r<=n && h[r]==h[r-1])++r;--r; ans=max(ans,r-l+1); l=k-1,r=k+1; while(r<=n && h[r]<=h[r-1])++r;--r; while(l && h[l]==h[l+1])--l;++l; ans=max(ans,r-l+1);}printf("%d\n",ans);return 0;}
0 0
- ssoj1338蜘蛛侠 trampolin
- 蜘蛛侠
- 《超凡蜘蛛侠》
- 李彦宏背后的蜘蛛侠
- 泪为蜘蛛侠
- 《超凡蜘蛛侠》观后感
- GDOI2016模拟8.15蜘蛛侠
- GDOI模拟 蜘蛛侠
- Spider-Man: Total Mayhem(蜘蛛侠)
- 【超凡蜘蛛侠2】火爆来袭
- 我确信蜘蛛侠来过
- 《蜘蛛侠》导演操刀著名网游《魔兽世界》电影版
- Sony告诉我们普通人也能变身蜘蛛侠
- 安卓游戏《超凡蜘蛛侠》测评
- 韩国票房:“蜘蛛侠”挤掉“美队”称王
- 动态规划法之蜘蛛侠救美记
- 蜘蛛侠飞越纽约上空,在Spider-Man3拍摄现场
- 今天去飞扬电影城看蜘蛛侠3
- TCP和UDP的区别
- 如何调试分析Android中发生的tombstone
- 项目____EL、JQuery____加载预处理
- 长度限制计算长度与服务器计算长度不符
- NOIP 2006 金明的预算方案|动态规划
- ssoj1338蜘蛛侠 trampolin
- dyld: Library not loaded: 错误解决方法
- 马良建模学习笔记——软包制作十二
- HDU5492 Find a path (DP+水题)
- JAVA利用DOM操作XML文件
- 我的第一个NDKDmeo
- 【HTML】空格
- Mysql 主从复制-原理篇
- Java基础总结