博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
360:跳高游戏
阅读量:4929 次
发布时间:2019-06-11

本文共 2824 字,大约阅读时间需要 9 分钟。

这题,哎少写了=号贼难受。

题目描述:

小新是一名学生,最近妈妈给他送了一款小霸王游戏机,他非常的开心,里面有一款游戏他非常的喜爱。游戏中,一个模型会在一条隧道中向前运动,途中会遇到狠多高高低低,上上下下的障碍物,小新需要用到不同的操作力度和按键方案来使模型跳到要求的高度从而越过障碍,连续调高是比较难的操作,小新反反复复完了很多遍,都没能前进很多。于是他希望从失败中寻找一些规律,以便下次再玩时会轻松的越过这些障碍。

我们假设一共有n个障碍物,从左到右分别用1到n来标识。我们用一个整数ai来标识小新需要在第i个障碍物处恰好跳到ai的高度才可以越过该障碍,如果连续3个障碍物的高度是不递减的,即ai<=ai+1<=ai+2,那么小新会将这里记为障碍难点,注意每个障碍物可以被记录多次,例如连续5个障碍物的高度分别为1 2 3 4 5,这里有3个障碍难点,分别为1 2 3,2 3 4,3 4 5.

现在小新已知n个障碍物的高度,想知道区间[l,r]里一共有多少个障碍难点,你能帮助他计算一下么?

输入:

第一行一个整数n,1<=n<=20000;

第二行n个整数,1<=ai<=100000000;

第三行一个整数m,表示有m次询问,1<=m<=200000;

接下来m行每行2个整数l,r,1<=l<=r<=200000;

输入规模较大,cin/cout读写速度较慢,推荐使用scanf/printf。

输出:

 一共m行,每行对应一个查询。

样例输入:

5

1 2 3 4 4

5

1 2

1 3

2 4

2 5

4 4

样例输出:

0

1

1

2

0

C++实现没管cin和cout,逻辑对,但是只能通过80%,不知道为什么。

 

// ConsoleApplication4test.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include 
#include
#include
#include
using namespace std;bool fun2(int&a, int&b, int&c){ if (c>=b&&b>=a) { return true; } else { return false; }}int fun1(vector
& v,int& k,int& e ){ int count = 0; for (int i = (k-1); i < (e-2); i++) { if (fun2(v.at(i),v.at(i+1),v.at(i+2))) { count++; } } return count;}int _tmain(int argc, _TCHAR* argv[]){ int n; cin >> n; vector
v; int temp_num; for (int i = 0; i < n; i++) { cin >> temp_num; v.push_back(temp_num); } int m; cin >> m; vector
s; for (int i = 0; i < 2*m; i++) { cin >> temp_num; s.push_back(temp_num); } for (int i = 0; i < m; i++) { cout << fun1(v, s.at(2*i), s.at(2*i + 1)) << endl; } return 0;}

 

Java:同学写的是80%

1 public static void main(String[] args) { 2  3  4     Scanner scanner = new Scanner(System.in); 5     int n = scanner.nextInt(); 6  7  8     int[] num = new int[n]; 9     for (int i = 0; i < n; i++) {10         num[i] = scanner.nextInt();11     }12 13     int m = scanner.nextInt();14     int[][] mm = new int[m][2];15     scanner.nextLine();16 17 18     for (int i = 0; i < m; i++) {19         if (n < 3) {20             System.out.println(0);21         }22 23         String[] s = scanner.nextLine().split(" ");24         mm[i][0] = Integer.parseInt(s[0]);25         mm[i][1] = Integer.parseInt(s[1]);26         if ((mm[i][1] - mm[i][0]) < 2) {27             System.out.println(0);28         } else {29             int k = mm[i][0] - 1;30             int g = mm[i][1] - 1;31 32             int count = 0;33             for (int l = k; l + 2 <= g; l++) {34                 if (num[l] <= num[l + 1] && num[l + 1] <= num[l + 2]) {35                     count++;36                 }37             }38             System.out.println(count);39         }40     }41 }

 

转载于:https://www.cnblogs.com/zdtiio/p/7565138.html

你可能感兴趣的文章
PV操作
查看>>
URL编码
查看>>
IOS 键盘的显示与关闭
查看>>
Oracle CASE WHEN 用法介绍
查看>>
300 Professional WordPress Themes Of 2012
查看>>
Java中String对象的创建
查看>>
【CentOS_7】安装nginx
查看>>
Android 启动模式--任务(Task)--桟 的误区
查看>>
CSS框架BluePrint
查看>>
hadoop_eclipse及HDT插件的使用
查看>>
Oracle数据库02
查看>>
关于MediaPlayer的详细介绍
查看>>
腾讯UED 漂亮的提示信息
查看>>
Oracle 学习笔记(六)
查看>>
asp.net FileUpload上传文件
查看>>
gridview里找到控件
查看>>
C++编程基础一 29-if语句
查看>>
automic不安全详解(转)
查看>>
一个简单的环境光shader
查看>>
sublime 的简单应用1
查看>>