黒ココアさんのメモ置き場

メモを置いたり置かなかったり

ABC335 D - Loong and Takahashi

atcoder.jp

問題

  • $N \times N$のグリッド上に、$N2-1$までの長さの紐と、高橋くんを設置してね
  • 高橋くんは真ん中に設置してね

成約

  • $ 3 \leq N \leq 45 $
  • $ N $は奇数

思考

  • 構築問題だ
  • 高橋くん真ん中なので、ぐるぐる~っと螺旋書いたら良さそう
  • 本番中はループで方向とか管理するの面倒だなぁと思ってスプレッドシートで手打ちした…
  • 実際に今ループで書いてみたらそんなにだったので、ちゃんと書くべきだったなぁ…

コード

N = int(input())

grid_L = [[-1] * N for _ in range(N)]

num = 1
now_x = 0
now_y = 0
dx = [0,1,0,-1]
dy = [1,0,-1,0]
dir = 0

while True:

    grid_L[now_x][now_y] = num
    num += 1
    if num > N**2:
        grid_L[now_x][now_y] = "T"
        break

    if 0 <= now_x + dx[dir] < N and 0 <= now_y + dy[dir] < N and grid_L[now_x + dx[dir]][now_y + dy[dir]] == -1:
        now_x += dx[dir]
        now_y += dy[dir]
    else:
        dir += 1
        dir %= 4
        now_x += dx[dir]
        now_y += dy[dir]

for row in grid_L:
    print(*row)