AtCoderBeginnerContest239 C問題300点 「Knight Fork」
https://gyazo.com/83df7a2ec990e4b4f64f261c77fc730d
問題概要
制約
気持ち
解法
2 つの格子点から「距離が$ \sqrt{5}」であるような点があるかを調べる問題です。
ここで、1つ目の格子点をA, 2つ目の格子点をBとします。
このとき、距離が$ \sqrt{5}となるような頂点の候補は、格子点Aの周囲5の距離ぐらいにしかないことがわかります。
よって、格子点Aの周囲5ほどの点を全探索し、AとBともに距離が$ \sqrt{5}となるか調べればよいです。
計算量
新たな学び
反省点
コード
code: go
func dist(a, b, c, d int64) int64 {
dx := a - c
dy := b - d
return dx*dx + dy*dy
}
func solve() {
var x1, y1, x2, y2 int64
fmt.Scan(&x1, &y1, &x2, &y2)
for dx := -5; dx <= 5; dx++ {
for dy := -5; dy <= 5; dy++ {
nx := int64(dx) + x1
ny := int64(dy) + y1
if dist(nx, ny, x1, y1) == 5 && dist(nx, ny, x2, y2) == 5 {
fmt.Println("Yes")
return
}
}
}
fmt.Println("No")
}