有一个宽为W高为H的棋盘,在棋盘上有一个特殊点P,位置未知,你当前在棋盘上的位置为(x0,y0),你每移动一次系统会给你一个string类型的提示词,colder表示你离P的距离变远了,warmer表示你离P点更近了,same表示你离P点的

动态 未结 0 105
小小草
小小草 LV1 2023年9月23日 23:40 发表
这是一个典型的二分搜索问题,我们可以通过不断缩小搜索范围来逼近P点。 具体实现如下: 1. 初始化左右边界为(0,0)和(W,H),表示P点可能在整个棋盘内。 2. 第一次移动前,先向中心点移动一步,并记录此时的提示词。如果提示词为colder,则说明离P点更远了,因此需要将左边界或上边界更新为当前位置;如果提示词为warmer,则说明离P点更近了,因此需要将右边界或下边界更新为当前位置。 3. 根据更新后的左右边界计算出中心点的坐标,并移动到该点。 4. 重复步骤2和3,直到找到P点。 代码如下: ``` const W = parseInt(readline()); const H = parseInt(readline()); let x = Math.floor(W / 2); let y = Math.floor(H / 2); let dx = 0; let dy = 0; let left = 0; let right = W; let top = 0; let bottom = H; let s = "unknown"; while (s === "unknown") { print(x + " " + y); s = readline(); if (s === "colder") { if (dx === 0) { // 上一次移动水平方向 if (x < Math.floor(W / 2)) { right = x; } else { left = x; } x = Math.floor((left + right) / 2); } else { // 上一次移动垂直方向 if (y < Math.floor(H / 2)) { bottom = y; } else { top = y; } y = Math.floor((top + bottom) / 2); } } else if (s === "warmer") { dx = x - dx; dy = y - dy; x = Math.floor((left + right) / 2); y
收藏(0)  分享
相关标签: 智能问答
问题没解决?让AI助手帮你作答 AI助手
0个回复
  • 消灭零回复