Задача Задача №3524839
А
А
Задача состоит в подсчёте числа допустимых ходов коня с заданной клетки на стандартной 8x8 доске.
Ключевые идеи:
- Координаты клетки: файлы a..h соответствуют x=0..7, ранги 1..8 – y=0..7.
- Ходы коня: 8 вариантов (dx, dy): (1,2),(2,1),(2,-1),(1,-2),(-1,-2),(-2,-1),(-2,1),(-1,2).
- Подсчитываем, сколько из них попадают в диапазон 0..7 по обеим координатам.
Алгоритм:
- Считываем N и далее N клеток (например, "a1", "e4").
- Для каждой клетки переводим в координаты (x,y).
- Подсчитываем число допустимых ходов, проверяя 0 <= x+dx < 8 и 0 <= y+dy < 8.
- Выводим результат по строкам.
Пример кода на Python:
import sys
def count_knight_moves(square: str) -> int:
# Переводим клетку в координаты 0..7
file = ord(square[0]) - ord('a') # 'a' -> 0, ..., 'h' -> 7
rank = int(square[1]) - 1 # '1' -> 0, ..., '8' -> 7
moves = [
(1, 2), (2, 1), (2, -1), (1, -2),
(-1, -2), (-2, -1), (-2, 1), (-1, 2)
]
cnt = 0
for dx, dy in moves:
x = file + dx
y = rank + dy
if 0 <= x < 8 and 0 <= y < 8:
cnt += 1
return cnt
def main():
data = sys.stdin.read().strip().split()
if not data:
return
t = int(data[0])
res = []
for i in range(1, t + 1):
sq = data[i]
res.append(str(count_knight_moves(sq)))
print("\n".join(res))
if __name__ == "__main__":
main()
Пояснения по сложности:
- Время: для каждого теста выполняется ровно 8 проверок, так что итоговая сложность O(N).
- Память: константная дополнительная память.
Некоторые справочные значения для intuition:
- Конь в углу (например, a1) имеет 2 возможных хода.
- Конь на краю, но не в углу (например, a2) имеет 3 хода.
- В центре доски (например, d4) — 8 ходов.