当前位置:网站首页>跳房子游戏
跳房子游戏
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;
}
}四 测试

边栏推荐
- Docker 面试题2则--取数据库连接数和docker-compose
- FITC标记生物素(FITC-生物素|CAS:134759-22-1)有哪些知识了?
- 微信账户体系科普:什么是UnionId、OpenId与wxopenid?
- XSS详解及复现gallerycms字符长度限制短域名绕过
- R语言使用glm函数构建逻辑回归模型(logistic)、使用subgroupAnalysis函数进行亚组分析并可视化森林图
- Biotin-Cy2 Conjugate,生物素-Cy2 偶联物_Cy2 生物素偶联物
- 2022金九银十工作潮,怎么样才能成功跳槽面试拿到高薪呢?
- 地雷数量求解
- Fedora 36 dnf 安装ModSecurity和 OWASP 核心规则集
- Stanford CS143 速通PA1教程
猜你喜欢

《痞子衡嵌入式半月刊》 第 60 期

最高月薪15K,谁有历经千辛万苦的意志,谁就能收获属于自己的成功~

Xi'an biotin-tetrapolyethylene glycol-amide-4phenol light yellow semi-solid

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

防勒索病毒现状分析

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

CAS:851113-28-5 (生物素-ahx-ahx-酪胺)

DHCP——动态主机配置协议

Biotin-Cy2 Conjugate,生物素-Cy2 偶联物_Cy2 生物素偶联物

Web性能测试模型小结
随机推荐
-Chess game-
Xi'an biotin-tetrapolyethylene glycol-amide-4phenol light yellow semi-solid
【Grpc】报错:status = StatusCode.UNIMPLEMENTED details = ““
[obs] obsqsv11 hard coding and comparison with metartc codec
PEG derivative Biotin-PEG1-OH (cas: 95611-10-2, 2-biotinaminoethanol) advantage description
R语言使用cox函数构建生存分析回归模型、使用subgroupAnalysis进行亚组分析并可视化森林图
小程序中计算距离信息
删除表空间数据文件
【CAS:41994-02-9 |Biotinyl tyramide】Biotinyl tyramide price
3.11-程序基本的控制语句 3.12-表达式 3.13-数据类型 3.14-常量/变量 3.15-标识符
递归 二分查找 冒泡排序 快速排序
c语言指针练习题
输入的这些数是否对称
【毕业设计】基于ESP32的在线墨水屏桌面摆件 -物联网 单片机 嵌入式
GB28181 sip和RTSP(Real-Time Streaming Protocol)实时流控制协议
03|Process Control
Moonbeam网络维护模式(Maintenance Mode)解读
Stanford CS143 速通PA1教程
分析 20 个 veToken 生态系统协议 这种代币模型为何受欢迎?
技术分享 | 接口自动化测试如何处理 Header cookie