这是一个典型的二分搜索问题,我们可以通过不断缩小搜索范围来逼近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