当前位置:网站首页>跳房子游戏
跳房子游戏
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;
}
}
四 测试
边栏推荐
- ASEMI整流桥GBJ1010参数,GBJ1010规格,GBJ1010封装
- Xi'an biotin-tetrapolyethylene glycol-amide-4phenol light yellow semi-solid
- 人际关系不仅要“存”,更要“激活”!
- PEG derivative Biotin-PEG1-OH (cas: 95611-10-2, 2-biotinaminoethanol) advantage description
- 生物素叠氮化物中的(CAS:1527486-16-3TAMRA-azide-PEG3-Biotin)反应的特点!
- Next.js获取路由参数及styled-jsx 的使用
- 分析 20 个 veToken 生态系统协议 这种代币模型为何受欢迎?
- 微信公众号如何开通支付功能?
- oracle的数据导入导出
- Pyscript,创建一个能执行crud操作的网页应用
猜你喜欢
flask——请求、响应、请求扩展、session、闪现、蓝图、g对象、flask-session
y92.第六章 微服务、服务网格及Envoy实战 -- Envoy基础(三)
CAS:183896-00-6 (Biotin-PEG3-C3-NH2) PEG衍生物
MySQL最大连接数限制如何修改
【kali-密码攻击】(5.1.2)密码在线破解:Medusa
GB28181 sip和RTSP(Real-Time Streaming Protocol)实时流控制协议
XSS高级 svg 复现一个循环问题以及两个循环问题
CVPR22 Oral|通过多尺度token聚合分流自注意力,代码已开源
开发IM即时通讯容易吗?需要什么技术
Mysql数据库 ALTER 基本操作
随机推荐
西安生物素-四聚乙二醇-酰胺-4苯酚 浅黄色半固态
【毕业设计】 基于Stm32的家庭智能监控系统 - 单片机 图像识别 人体检测 AI
Entity FrameWork Core教程,从基础应用到原理实战
基于Web的疫情隔离区订餐系统
Moonbeam网络维护模式(Maintenance Mode)解读
Stanford CS143 Speed Pass PA1 Tutorial
-采花生-
即时通讯开发如何撸一个WebSocket服务器
Involved in PEG-Biotin (CAS: 1778736-18-7) Biotin-PEG4-OH is widely used in molecular target detection
-红与黑-
递归 二分查找 冒泡排序 快速排序
什么是持续测试?
Biotin-Cy2 Conjugate, Biotin-Cy2 Conjugate_Cy2 Biotin Conjugate
FITC标记生物素(FITC-生物素|CAS:134759-22-1)有哪些知识了?
阿里云混合云管理平台多Region架构
【Grpc】报错:status = StatusCode.UNIMPLEMENTED details = ““
【毕业设计】基于ESP32的在线墨水屏桌面摆件 -物联网 单片机 嵌入式
Stanford CS143 速通PA1教程
el-input保留一位小数点
Enhanced Deep Residual Networks for Single Image Super-Resolution