【Hihocoder - offer编程练习赛86 - C】跳数游戏(STLset或map预处理,dp)

题干:

时间限制:10000ms

单点时限:1000ms

内存限制:256MB

描述

给定一个长度为N的数组A1, A2, ... AN,请你判断其中有几个元素Ai按如下跳跃规则能跳到最后一个元素AN。  

假设你当前位于Ai,跳跃的规则是:

如果这一步是第奇数次跳跃(从1开始计数),可以跳到Ai之后(Ai+1 .. AN)比Ai大的最小的元素;

如果这一步是第偶数次跳跃,可以跳到Ai之后(Ai+1 .. AN)比Ai小的最大的元素;

如果有多个满足条件的元素,则跳到其中下标最小的元素。  

如果没有满足条件的元素,则在当前的Ai停下来。  

例如对于A = [3, 2, 4, 1, 5],如果从3开始,第一步从3跳到4,第二步从4跳到1,第三步从1跳到5。

输入

第一行包含一个整数N。  

第二行包含N个整数A1, A2, ... AN。  

对于30%的数据,1 <= N <= 100  

对于60%的数据,1 <= N <= 1000  

对于100%的数据,1 <= N <= 100000  1 <= Ai <= 1000000

输出

一个整数代表答案

样例输入

5  
3 4 1 2 5

样例输出

4

解题报告:

   先用set倒着扫一遍数组,顺便预处理出距离最近的比他大的最小的数的下标,和距离最近的比他小的最大的数的下标,这一步可以用单调栈O(n)实现,但是因为时间允许于是set好写一些。然后dp代表从编号i开始的第偶数/奇数步,能不能到达最后。

AC代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#include<cctype>
#define ll long long
#define pb push_back
#define pm make_pair
using namespace std;
const int MAX = 2e6 + 5;
set<int> ss;
bool dp[MAX][2];
int big[MAX],small[MAX],pos[MAX],a[MAX];//预处理出后面第一个比他大的和第一个比他小的 
int main() {int n;cin>>n;for(int i = 1; i<=n; i++) scanf("%d",a+i);for(int i = n; i>=1; i--) {if(ss.count(a[i])) pos[a[i]] = i;else ss.insert(a[i]),pos[a[i]] = i;auto it = ss.upper_bound(a[i]);if(it != ss.end()) big[i] = pos[*it];else big[i] = -1;it = ss.lower_bound(a[i]);if(it == ss.begin()) small[i] = -1;else {--it;small[i] = pos[*it];}}
//	for(int i = 1; i<=n; i++ ) {
//		printf("i: %d : %d %d\n",i,big[i],small[i]);
//	}dp[n][0] = 1,dp[n][1] = 1;for(int i = n-1; i>=1; i--) {if(big[i] != -1) dp[i][1] = dp[big[i]][0];if(small[i] != -1) dp[i][0] = dp[small[i]][1];}int ans = 0;for(int i = 1; i<=n; i++) {if(dp[i][1]) ans++;}printf("%d\n",ans);return 0 ;}

注意因为题中的大于和小于都是严格大于和严格小于,所以判断大于必须用upper,否则可能set中已经有一个a[i]了,,你再lower就肯定不对了。

同样的,也可以用map实现:

#include <bits/stdc++.h>
using namespace std;
const int N = 1e5+55;
int dp[N][2];
int a[N];
int main()
{int n;cin>>n;for(int i=1;i<=n;++i)cin>>a[i];map<int,int> mp;map<int,int> ::iterator it;mp[a[n]] = n;dp[n][1] = 1;dp[n][0] = 1;for(int i=n-1;i>0;--i){it = mp.lower_bound(a[i]);if(it==mp.end()||it==mp.begin()) dp[i][0] = 0;else dp[i][0] = dp[(--it)->second][1];it = mp.upper_bound(a[i]);if(it==mp.end()) dp[i][1] = 0;else dp[i][1] = dp[it->second][0];mp[a[i]]=i;}int ans = 0;for(int i=1;i<=n;++i){if(dp[i][1]) ans++;}cout<<ans;return 0;
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/440645.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux+平均磁盘请求数量_Linux 查看磁盘IO并找出占用IO读写很高的进程

背景-线上告警线上一台服务器告警&#xff0c;磁盘利用率 disk.util > 90&#xff0c;并持续告警。登录该服务器后通过 iostat -x 1 10 查看了相关磁盘使用信息。相关截图如下&#xff1a;# 如果没有 iostat 命令&#xff0c;那么使用 yum install sysstat 进行安装# iostat…

计算机网络技术实验,计算机网络技术实验

计算机网络技术实验 实 验 一 (2课时) 课题(项目)名称: 基本网络命令 计划学时: 2学时 实验目的 1. 了解网络命令的基本使用方法 2. 掌握常用网络命令的应用 3. 掌握网络通达性的基本测试方法 实验要求 1. 全面了解各种网络命令 2. 对常用的网络命令&#xff0c;上机测试运行 3…

【7-10 PAT】树的遍历(给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列。)

题干&#xff1a; 给定一棵二叉树的后序遍历和中序遍历&#xff0c;请你输出其层序遍历的序列。这里假设键值都是互不相等的正整数。 解题报告&#xff1a; dfs求出这棵树来&#xff0c;然后bfs求层序遍历就行了。 AC代码&#xff1a; #include<cstdio> #include<…

html div分钟刷新一次啊代码_接口测试平台代码实现57首页重构5

本节我们接着开发首页&#xff0c;主要内容是 让左侧的请求记录和右侧的请求模块 联动起来。具体联动需求&#xff1a;右侧请求一次之后&#xff0c;左侧生成记录点击左侧记录&#xff0c;右侧则会显示这次记录的请求数据我们本节课的内容是想办法实现1-生成记录。我们知道&…

会计专业领域计算机应用系统,信息技术在会计专业领域中的应用

在当今这个信息时代,信息技术对会计专业产生了重大的变革。本文在详细分析会计信息化特征的基础上,阐述了由于信息技术应用对会计职能产生的影响,并提出了如何更好的在会计专业领域推广信息技术。信息技术在会计专业领域中的应用郑晨(福建农林大学计算机与信息学院&#xff0c;…

【ZOJ - 3703】Happy Programming Contest(带优先级的01背包,贪心背包)

题干&#xff1a; In Zhejiang University Programming Contest, a team is called "couple team" if it consists of only two students loving each other. In the contest, the team will get a lovely balloon with unique color for each problem they solved.…

固定 顶部_纹络型温室大棚顶部通风样式及效率对比

纹络型温室大棚是一种使用玻璃作为覆盖材料的温室大棚&#xff0c;该种温室大棚由于抗风雪能力强&#xff0c;环境控制能力强、使用年限长&#xff0c;目前在我国的南北地区大量建造。由于该型号的玻璃温室大棚单体占地面积能够达到几十亩地&#xff0c;因此单靠墙面通风无法满…

微型计算机智能体重评测,荣耀智能体脂秤WiFi版评测:17项身体指标 比你更懂你...

原标题&#xff1a;荣耀智能体脂秤WiFi版评测&#xff1a;17项身体指标 比你更懂你[PConline 评测]俗话说冬天不减肥&#xff0c;夏天徒伤悲&#xff0c;每个人都希望拥有穿衣显瘦、脱 衣有肉的完美身材。但往往理想很丰满&#xff0c;现实很骨感&#xff0c;很多人都陷入减肥的…

【ZOJ - 3211】Dream City (01背包类问题,贪心背包)

题干&#xff1a; JAVAMAN is visiting Dream City and he sees a yard of gold coin trees. There are n trees in the yard. Lets call them tree 1, tree 2 ...and tree n. At the first day, each tree i has ai coins on it (i1, 2, 3...n). Surprisingly, each tree i c…

gitlable iphone_使用gitlab ci构建IOS包并发送通知消息到企业微信

在之前的文章中&#xff0c;我们介绍了使用gitlab ci构建Android包的方法。今天我们介绍使用gitlab ci如何构建IOS包&#xff0c;并且在打包成功或者失败时&#xff0c;如何将消息通知到企业微信。如果对gitlab ci还不熟悉的&#xff0c;可以参考之前的文章使用gitlab ci构建An…

2020计算机网络基础与应用,2020年国防科技大学硕士研究生考试F1107计算机网络基础考试大纲...

全国各省市院校2020年硕士研究生考试大纲汇总(持续更新中)》》》2020年全国硕士研究生入学考试命题标准大纲已于7月8日正式公布&#xff0c;接下来全国各研招院校将陆续发布2020考研专业课大纲。以下是中公考研小编整理的“2020年国防科技大学硕士研究生考试F1107计算机网络基础…

【ZOJ - 3212 】K-Nice (构造)

题干&#xff1a; This is a super simple problem. The description is simple, the solution is simple. If you believe so, just read it on. Or if you dont, just pretend that you cant see this one. We say an element is inside a matrix if it has four neighbori…

chrome jsp 显示不正常_JSP程序在chrome下不兼容的问题!

比如&#xff0c;我这里有个&#xff1a;">比如&#xff0c;我这里有个&#xff1a;οnclick"javascript:onChooseLongCode()" value"...">在下面的JS动作中&#xff1a;function onChooseLongCode(){var qryFldVal qryFld.value;//要用 var q…

人脑意识转入量子计算机,人脑产生意识:可能是因为量子纠缠

图片来源&#xff1a;quanta magazine一提到“量子意识”这个词语&#xff0c;大多数物理学家都会选择避而不谈&#xff0c;因为这个词语听起来好像有点“民科”&#xff0c;甚至让人联想宗教或者玄学。不过出人意料的是&#xff0c;量子效应可能真的在人类的认知过程中起到了一…

【ZOJ - 1163】The Staircases(dp)

题干&#xff1a; One curious child has a set of N little bricks. From these bricks he builds different staircases. Staircase consists of steps of different sizes in a strictly descending order. It is not allowed for staircase to have steps equal sizes. Ev…

函授本科统考计算机考试时间,函授2006级计算机、机电本科第一学期考试时间安排.doc...

函授2006级计算机、机电本科第一学期考试时间安排.doc函授2006级计算机、机电本科第一学期考试时间安排答疑时间9月16日下午2&#xff1a;30&#xff0d;3&#xff1a;309月16日下午3&#xff1a;30&#xff0d;4&#xff1a;309月16日下午4&#xff1a;30&#xff0d;5&#x…

的级联选择_级联接收机的计算及Y因子噪声因子测量法

对于RF系统工程师来说&#xff0c;计算噪声系数预算对预测产品性能至关重要。一、级联接收机的计算这部分讨论噪声系数的一般概念&#xff0c;以及产品定义和电路设计者如何利用噪声系数表示噪声性能要求。噪声系数也用于预测接收机系统的总体灵敏度。也介绍级联接收机的噪声系…

*【PAT天梯】分而治之(并查集,暴力)

题干&#xff1a; L2-1 分而治之 &#xff08;25 分&#xff09; 分而治之&#xff0c;各个击破是兵家常用的策略之一。在战争中&#xff0c;我们希望首先攻下敌方的部分城市&#xff0c;使其剩余的城市变成孤立无援&#xff0c;然后再分头各个击破。为此参谋部提供了若干打击…

免费测试英语发音的软件,2020英语音标免费版

2020英语音标免费版是一款安卓手机英语音标内容学习软件&#xff0c;在这里汇集了英语音标相关内容学习&#xff0c;包含了音标、发音等内容学习&#xff0c;能够进行对比练习&#xff0c;不断对比&#xff0c;让发音更标准&#xff0c;拥有详细的发音知识可以学习&#xff0c;…

ajax后台重定向会返回什么_跳转,AJAX返回和重定向

## 页面跳转操作完成后,成功或失败页面跳转可以使用 控制器基类的success,error方法:#### success方法php/*** 操作成功跳转的快捷方法* access protected* param mixed $msg 提示信息* param string $url 跳转的URL地址* param mixed $data 返回的数据* param integer $wait 跳…