当前位置:网站首页>跳房子游戏
跳房子游戏
2022-08-10 00:34:00 【chengqiuming】
一 问题描述
二 算法设计
1 如果移除石头数等于总石头数(M=N),则直接输入L。
2 增加开始(0)和结束(N+1)两块石头,到开始节点的距离分别为 0 和 L。
3 对所有的石头都按照从开始节点的距离从小到大排序。
4 让 left = 0,right=L,如果 right-left>1,则 mid=(right+left)/2,判断是否满足移除 M 块石头之后,任意间距都小于 mid。如果满足,则说明距离还可以更大,让 left = mid;否则让 right = mid,继续进行二分搜索。
5 搜索结束后, left 就是母牛必须跳跃的最短距离的最大值。
三 代码
package com.platform.modules.alg.alglib.poj3258;
import java.util.Arrays;
public class Poj3258 {
public String output = "";
private final int maxn = 50050;
private Integer L;
private Integer n;
private Integer m;
private Integer dis[] = new Integer[maxn];
public Poj3258() {
for (int i = 0; i < dis.length; i++) {
dis[i] = 0xFFFFFFF;
}
}
public String cal(String input) {
String[] line = input.split("\n");
String[] line1 = line[0].split(" ");
L = Integer.parseInt(line1[0]);
n = Integer.parseInt(line1[1]);
m = Integer.parseInt(line1[2]);
if (n == m) {
return L.toString();
}
for (int i = 1; i <= n; i++) {
dis[i] = Integer.parseInt(line[i]);
}
dis[0] = 0; // 增加开始点
dis[n + 1] = L; // 增加结束点
Arrays.sort(dis, 0, n + 1);
//sort(dis, dis + n + 2);
Integer left = 0;
Integer right = L;
while (right - left > 1) {
int mid = (right + left) / 2;
if (judge(mid))
left = mid;//如果放得开,说明x还可以更大
else
right = mid;
}
return left.toString();
}
boolean judge(int x) { //移除m个石头之后,任意间距不小于x
int num = n - m; //减掉m个石头,放置num个石头,循环num次
int last = 0; //记录前一个已放置石头下标
for (int i = 0; i < num; i++) { //对于这些石头,要使任意间距不小于x
int cur = last + 1;
while (cur <= n && dis[cur] - dis[last] < x) //放在第1个与last距离>=x的位置
cur++; //由cur累计位置
if (cur > n)
return false; //如果在这个过程中大于n了,说明放不开
last = cur; //更新last位置
}
return true;
}
}四 测试

边栏推荐
- 小程序实现搜索功能续
- flask——请求、响应、请求扩展、session、闪现、蓝图、g对象、flask-session
- Solidity最强对手:MOVE语言及新公链崛起
- 【毕业设计】 基于Stm32的家庭智能监控系统 - 单片机 图像识别 人体检测 AI
- eyb:Redis学习(4)
- 微信公众号如何开通支付功能?
- Pyscript,创建一个能执行crud操作的网页应用
- 365天挑战LeetCode1000题——Day 052 逐步求和得到正数的最小值 贪心
- 20220808-一些想法
- How to turn off system protection in Win11?How to turn off the system protection restore function?
猜你喜欢

初步认识对象

【毕业设计】基于ESP32的在线墨水屏桌面摆件 -物联网 单片机 嵌入式

这一次,话筒给你:向自由软件之父 Richard M. Stallman 提问啦!

Involved in PEG-Biotin (CAS: 1778736-18-7) Biotin-PEG4-OH is widely used in molecular target detection

02| operator

GB28181 sip和RTSP(Real-Time Streaming Protocol)实时流控制协议

快速响应性智能型/智能响应性聚乙二醇纳米/还原响应型水凝胶的研究与制备

03|Process Control

MySQL最大连接数限制如何修改

改变社交与工作状态的即时通讯是什么呢?
随机推荐
高校就业管理系统设计与实现
有PEG-Biotin参与的(CAS:1778736-18-7)Biotin-PEG4-OH广泛用于分子靶点检测
el-input保留一位小数点
GB28181 sip和RTSP(Real-Time Streaming Protocol)实时流控制协议
OSS-访问oss生成的url无法访问,直接下载问题
@PostConsturct注解作用及特点
改变社交与工作状态的即时通讯是什么呢?
RedHat红帽RHEL7安装与使用,VMware Workstation16 Pro虚拟机的安装与使用
使用 GoogleTest 框架对 C 代码进行单元测试
-象棋比赛-
PEG derivative Biotin-PEG1-OH (cas: 95611-10-2, 2-biotinaminoethanol) advantage description
微信账户体系科普:什么是UnionId、OpenId与wxopenid?
【毕业设计】 基于Stm32的家庭智能监控系统 - 单片机 图像识别 人体检测 AI
Summary of basic operations of c language files
c语言文件基本操作总结
Xi'an biotin-tetrapolyethylene glycol-amide-4phenol light yellow semi-solid
y92.第六章 微服务、服务网格及Envoy实战 -- Envoy基础(三)
递归 二分查找 冒泡排序 快速排序
小程序实现搜索功能续
鲜花线上销售管理系统的设计与实现