結果

問題 No.3339 Tree on Checkerboard
コンテスト
ユーザー ikatakos
提出日時 2025-11-08 15:51:49
言語 Python3
(3.13.1 + numpy 2.2.1 + scipy 1.14.1)
結果
AC  
実行時間 204 ms / 2,000 ms
コード長 3,146 bytes
コンパイル時間 344 ms
コンパイル使用メモリ 12,672 KB
実行使用メモリ 45,824 KB
最終ジャッジ日時 2025-11-08 15:52:11
合計ジャッジ時間 20,664 ms
ジャッジサーバーID
(参考情報)
judge4 / judge1
純コード判定待ち
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 2
other AC * 98
権限があれば一括ダウンロードができます

ソースコード

diff #

def solve(n):
    if n == 1:
        return ['.']
    if n == 3:
        return ['...', '.#.', '..#']
    if n == 5:
        return ['.....', '.#.#.', '..#..', '.#.#.', '....#']
    if n == 7:
        return ['......#', '.#.#.#.', '..#....', '.#.#.#.', '....#..', '.#.#.#.', '#.....#']
    if n == 9:
        return ['.........',
                '.#.#.#.#.',
                '..#...#..',
                '.#.#.#.#.',
                '....#....',
                '.#.#.#.#.',
                '..#...#..',
                '.#.#.#.#.',
                '........#']
    if n == 11:
        return ['..........#',
                '.#.#.#.#.#.',
                '..#...#....',
                '.#.#.#.#.#.',
                '....#...#..',
                '.#.#.#.#.#.',
                '..#........',
                '.#.#.#.#.#.',
                '....#...#..',
                '.#.#.#.#.#.',
                '#.....#....']

    if n % 2 == 0:
        ans2 = solve(n - 1)
        for i in range(n - 1):
            if ans2[0][i] == '#' or ans2[i][0] == '#':
                return []
        ans = ['#.' * (n // 2)]
        for i in range(n - 1):
            ans.append(('.' if i % 2 == 0 else '#') + ans2[i])
        return ans

    w = n // 2
    ans = []
    for i in range(n):
        if i % 2 == 0:
            ans.append(['.'] * n)
        else:
            ans.append(['.', '#'] * w + ['.'])

    if w % 2 == 0:
        # ┌───
        # │┌──
        # ││┌─
        for l in range(w // 3):
            s = l * 6 + 2
            for i in range(s, n - 1, 2):
                if (i - s) % 4 == 0:
                    ans[i][s] = '#'
                    ans[s][i] = '#'
                else:
                    ans[i][s + 2] = '#'
                    ans[s + 2][i] = '#'
            if s % 4 == 2:
                ans[-1][s + 2] = '#'
                ans[s + 4][-1] = '#'
            else:
                ans[-1][s] = '#'
        if w % 6 == 2:
            ans[-3][-3] = '#'
            ans[-1][-1] = '#'
    else:
        # ┌┐┌
        # │││
        # │└┘
        for j2 in range(w - 1):
            j = j2 * 2 + 2
            if j2 % 6 == 0 or j2 % 6 == 4:
                for i in range(2, n - 1, 4):
                    ans[i][j] = '#'
            elif j2 % 6 == 1 or j2 % 6 == 3:
                for i in range(4, n - 1, 4):
                    ans[i][j] = '#'
            elif j2 % 6 == 2:
                ans[2][j] = '#'
            else:
                ans[-3][j] = '#'
        ans[-1][2] = '#'
        if w % 6 == 1:
            ans[-3][-3] = '.'
            ans[-1][-3] = '#'
            for i in range(2, n - 1, 4):
                ans[i][-1] = '#'
        elif w % 6 == 3:
            ans[2][-1] = '#'
            ans[-3][-7] = '.'
            ans[-1][-7] = '#'
        else:
            ans[2][-1] = '#'
            ans[-3][-11] = '.'
            ans[-1][-11] = '#'
            for i in range(10, n, 8):
                ans[i][-1] = '#'

    ans = [''.join(row) for row in ans]
    return ans


n = int(input())
ans = solve(n)
if len(ans) == 0:
    print(-1)
else:
    print('\n'.join(ans))
0