Bài toán

Link đến bài toán: 2849. Determine if a Cell Is Reachable at a Given Time

Phân tích

Bài này thực ra rất dễ, chỉ có 1 edge case khá khó chịu là t == 1. Để tìm khoảng cách nhỏ nhất giữa 2 điểm trên một grid, ta dùng công thức Chebyshev distance:

d = max(abs(x1 - x2), abs(y1 - y2))

Mình có thể nhận thấy rằng, miễn là t >= d, ta sẽ luôn có thể đi từ điểm bắt đầu đến điểm kết thúc trong t bước. Tuy nhiên, nếu x == y, và t == 1, thì ta không thể đi được từ điểm bắt đầu đến điểm kết thúc.

Giải thuật

func isReachableAtTime(sx int, sy int, fx int, fy int, t int) bool {
if fx == sx && fy == sy && t == 1 {
return false
}

return max(math.Abs(float64(fx-sx)), math.Abs(float64(fy-sy))) <= float64(t)
}

func max(a, b float64) float64 {
if a > b {
return a
}
return b
}