这是一个典型的二分搜索问题,我们可以通过不断缩小搜索范围来逼近P点。
具体实现如下:
1. 初始化左右边界为(0,0)和(W,H),表示P点可能在整个棋盘内。
2. 每次根据提示词更新左右边界,缩小搜索范围。如果提示词为colder,则说明离P点更远了,因此需要将左边界或上边界更新为当前位置;如果提示词为warmer,则说明离P点更近了,因此需要将右边界或下边界更新为当前位置。
3. 根据更新后的左右边界计算出中心点的坐标,并移动到该点。
4. 重复步骤2和3,直到找到P点。
代码如下:
```
W, H = map(int, input().split())
x, y = W // 2, H // 2 # 初始位置为棋盘中心
dx, dy = 0, 0 # 上一次移动的方向
while True:
print(x, y)
s = input()
if s == 'found':
break
if s == 'colder':
if dx == 0: # 上一次移动水平方向
if x < W // 2:
W, x = x, (x + dx) // 2
else:
x, W = (x + dx) // 2, x
else: # 上一次移动垂直方向
if y < H // 2:
H, y = y, (y + dy) // 2
else:
y, H = (y + dy) // 2, y
elif s == 'warmer':
dx, dy = x - dx, y - dy # 记录上一次移动的方向
x, y = (x + dx) // 2, (y + dy) // 2 # 移动