結果

問題 No.3728 Half and Half, and Double
コンテスト
ユーザー Kude
提出日時 2026-09-19 16:48:16
言語 PyPy3
(7.3.23 + ACL)
コンパイル:
pypy3 -mpy_compile _filename_
実行:
pypy3 _filename_
結果
WA  
実行時間 -
コード長 2,914 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 74 ms
コンパイル使用メモリ 81,920 KB
実行使用メモリ 92,536 KB
最終ジャッジ日時 2026-09-19 16:48:28
合計ジャッジ時間 6,933 ms
ジャッジサーバーID
(参考情報)
judge1_0 / judge4_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 2
other AC * 32 WA * 1
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

from math import isqrt
def solve(n):
    g = [[0] * (2 * n + 2) for _ in range(2 * n + 2)]

    for i in range(1, 2 * n + 1):
        for j in range(1, 2 * n + 1):
            g[i][j] = 2

    g[1][2] = 1
    rest = 4 * n * n // 2 - 1
    # print(rest)
    d = isqrt(rest) + (2 if n >= 6 else 1)
    for i in range(d):
        for j in range(d):
            g[2+i][2+j] = 1
    rest -= d * d

    # if n >= 3:
    #     rest += 1
    #     assert g[2][4] == 1
    #     g[2][4] = 2
    # g[1][3] = 1
    # g[1][4] = 1
    # g[1][5] = 1
    # g[1][6] = 1

    def pr():
        nonlocal g
        for gi in g:
            print(*gi, sep='')
    # pr()
    c1 = c2 = 0
    didj = (1, 0), (0, 1), (-1, 0), (0, -1)
    for i in range(1, 2 * n + 1):
        for j in range(1, 2 * n + 1):
            if g[i][j] == 1:
                for di, dj in didj:
                    c1 += g[i][j] != g[i+di][j+dj]
            elif g[i][j] == 2:
                for di, dj in didj:
                    c2 += g[i][j] != g[i+di][j+dj]
    def show_f():
        c1 = c2 = 0
        for i in range(2 * n + 2):
            c1 += g[i].count(1)
            c2 += g[i].count(2)
        print(c1,c2)
    # print(c1, c2)
    # exit(0)
    # print(rest)
    t = c2 - 2 * c1
    assert t >= 0 and t % 2 == 0
    t //= 2
    for i in range(t):
        g[1][3+i] = 1
        rest -= 1
    # print(rest)
    # show_f()
    # exit(0)

    # pr()
    c1 = c2 = 0
    didj = (1, 0), (0, 1), (-1, 0), (0, -1)
    for i in range(1, 2 * n + 1):
        for j in range(1, 2 * n + 1):
            if g[i][j] == 1:
                for di, dj in didj:
                    c1 += g[i][j] != g[i+di][j+dj]
            elif g[i][j] == 2:
                for di, dj in didj:
                    c2 += g[i][j] != g[i+di][j+dj]
    # pr()
    # print(c1, c2)
    # print(rest)
    # show_f()
    # exit(0)
    assert 2 * c1 == c2 and rest <= 0
    # print(c1, c2)
    rest *= -1
    i = j = 2 + d
    while rest:
        s = isqrt(rest)
        assert i - s >= 3
        for di in range(s):
            for dj in range(s):
                g[i-1-di][j-1-dj] = 2
        rest -= s * s
        i -= s
    c1 = c2 = 0
    didj = (1, 0), (0, 1), (-1, 0), (0, -1)
    for i in range(1, 2 * n + 1):
        for j in range(1, 2 * n + 1):
            if g[i][j] == 1:
                for di, dj in didj:
                    c1 += g[i][j] != g[i+di][j+dj]
            elif g[i][j] == 2:
                for di, dj in didj:
                    c2 += g[i][j] != g[i+di][j+dj]
    # pr()
    # print(c1, c2)
    # print(rest)
    c1 = c2 = 0
    for i in range(2 * n + 2):
        c1 += g[i].count(1)
        c2 += g[i].count(2)
    # print(c1, c2)
    # show_f()
    for i in range(1, 2 * n + 1):
        print(''.join('BA'[x-1] for x in g[i][1:2*n+1]))


# for n in range(5, 501):
    # print(n)
    # solve(n)
n = int(input())
if n <= 3:
    print(-1)
    exit(0)
solve(n)
0