結果

問題 No.3335 ReCT
コンテスト
ユーザー kidodesu
提出日時 2025-11-07 23:06:07
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 110 ms / 2,000 ms
コード長 6,513 bytes
コンパイル時間 166 ms
コンパイル使用メモリ 82,596 KB
実行使用メモリ 78,704 KB
最終ジャッジ日時 2025-11-07 23:06:18
合計ジャッジ時間 11,010 ms
ジャッジサーバーID
(参考情報)
judge4 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 2
other AC * 97
権限があれば一括ダウンロードができます

ソースコード

diff #

c34 = [[1, 2, 2, 2], [1, 2, 1, 2], [1, 1 ,1, 2]]
c36 = [[1, 3, 3, 3, 3, 2], [1, 3, 1, 2, 3, 2], [1, 1, 1, 2, 2, 2]]

def mainc(h0, h1, w0, w1, t):
    h = h1-h0
    w = w1-w0
    if h < 3:
        return
    elif h == 3:
        if w % 2:
            return
        elif w == 4:
            for y in range(h):
                for x in range(w):
                    Ans[h0+y][w0+x] = c34[y][x]+t
            return
        elif w == 6:
            for y in range(h):
                for x in range(w):
                    Ans[h0+y][w0+x] = c36[y][x]+t
            return
        else:
            for y in range(h):
                for x in range(4):
                    Ans[h0+y][w1-4+x] = c34[y][x]+t
            mainc(h0, h1, w0, w1-4, t+2)
            return
    elif h == 4:
        t0 = t+1
        t1 = t+2
        Ans[h0][w0] = t0
        Ans[h0+1][w0] = t0
        Ans[h0+2][w0] = t0
        Ans[h0+3][w0] = t1
        Ans[h0][w1-1] = t0
        Ans[h0+1][w1-1] = t1
        Ans[h0+2][w1-1] = t1
        Ans[h0+3][w1-1] = t1
        for y in range(h0, h1):
            for x in range(w0+1, w1-1):
                if not (y-h0) % 2:
                    Ans[y][x] = t0
                else:
                    Ans[y][x] = t1
        return
    elif h == w == 5 or h > 5:
        for x in range(w0, w1):
            Ans[h0][x] = t+1
            Ans[h1-1][x] = t+1
        for y in range(h0+1, h1-1):
            Ans[y][w1-1] = t+1
        mainc(h0+1, h1-1, w0, w1-1, t+1)
        return
    else:
        for y in range(h0, h1):
            Ans[y][w0] = t+1
            Ans[y][w1-1] = t+1
        for x in range(w0+1, w1-1):
            Ans[h1-1][x] = t+1
        mainc(h0, h1-1, w0+1, w1-1, t+1)
        return

T4 = [[2, 2, 2, 3], [1, 2, 3, 3], [1, 1, 4, 3], [1, 4, 4, 4]]
T5 = [[5, 5, 5, 5], [2, 2, 5, 3], [1, 2, 3, 3], [1, 1, 4, 3], [1, 4, 4, 4]]

T3 = [[1, 2, 2, 2, 2, 4], [1, 1, 2, 3, 4, 4], [1, 3, 3, 3, 3, 4]]

def maint(h0, h1, w0, w1, t):
    h = h1-h0
    w = w1-w0
    if h < 3:
        return
    elif h == 3:
        if w < 6:
            return
        else:
            P = [2, 4, 3]
            for y in range(3):
                for x in range(-2, 5):
                    if x < 0:
                        Bns[y+h0][x+w1] = T3[y][x]+t
                    else:
                        Bns[y+h0][x+w0] = T3[y][x]+t
            for y in range(3):
                for x in range(w0+4, w1-2):
                    Bns[y+h0][x] = P[y]+t
        return
    elif h == 4:
        P = [2, 3, 1, 4]
        for y in range(h):
            for x in range(-2, 2):
                if x < 0:
                    Bns[y+h0][x+w1] = T4[y][x]+t
                else:
                    Bns[y+h0][x+w0] = T4[y][x]+t
        for y in range(h):
            for x in range(w0+2, w1-2):
                Bns[y+h0][x] = P[y]+t
        return
    elif h == 5:
        P = [5, 2, 3, 1, 4]
        for y in range(h):
            for x in range(-2, 2):
                if x < 0:
                    Bns[y+h0][x+w1] = T5[y][x]+t
                else:
                    Bns[y+h0][x+w0] = T5[y][x]+t
        for y in range(h):
            for x in range(w0+2, w1-2):
                Bns[y+h0][x] = P[y]+t
        return
    elif h <= 7:
        t0 = t+1
        t1 = t+2
        t2 = t+3
        for y in range(h0, h1):
            Bns[y][w1-1] = t0
        for x in range(w0+2, w1-1):
            Bns[h1-2][x] = t0
            Bns[h1-1][x] = t1
        Bns[h1-2][w0] = t2
        Bns[h1-2][w0+1] = t1
        Bns[h1-1][w0] = t1
        Bns[h1-1][w0+1] = t1
        maint(h0, h1-2, w0, w1-1, t+2)
        return
    else:
        for y in range(-2, 2):
            for x in range(-2, 2):
                if y < 0 and x < 0:
                    Bns[y+h1][x+w1] = T4[y][x]+t
                elif y < 0:
                    Bns[y+h1][x+w0] = T4[y][x]+t
                elif x < 0:
                    Bns[y+h0][x+w1] = T4[y][x]+t
                else:
                    Bns[y+h0][x+w0] = T4[y][x]+t
        for y in range(h0+2, h1-2):
            Bns[y][w0] = t+1
            Bns[y][w0+1] = t+2
            Bns[y][w1-2] = t+4
            Bns[y][w1-1] = t+3
        for x in range(w0+2, w1-2):
            Bns[h0+0][x] = t+2
            Bns[h0+1][x] = t+3
            Bns[h1-2][x] = t+1
            Bns[h1-1][x] = t+4
        maint(h0+2, h1-2, w0+2, w1-2, t+4)
        return

def mainct(h0, h1, w0, w1, t):
    h = h1-h0
    w = w1-w0
    if h < 3:
        return
    elif h == 3:
        t0 = t+1
        t1 = t+2
        for y in range(h0, h1):
            Cns[y][w0] = t0
            Cns[y][w1-1] = t1
        for x in range(w0+1, w1-1):
            for y in range(h0, h1):
                if (y-h0) % 2:
                    Cns[y][x] = t0
                else:
                    Cns[y][x] = t1
        return
    elif h == 4:
        t0 = t+1
        t1 = t+2
        t2 = t+3
        for y in range(h0, h1-1):
            Cns[y][w0] = t0
            Cns[y][w1-1] = t1
        for x in range(w0+1, w1-1):
            for y in range(h0, h1-1):
                if (y-h0) % 2:
                    Cns[y][x] = t0
                else:
                    Cns[y][x] = t1
        Cns[h0+2][w0+1] = t2
        for x in range(w0, w1):
            Cns[h0+3][x] = t2
        return
    else:
        for x in range(w0, w1):
            Cns[h0][x] = t+1
            Cns[h1-1][x] = t+1
        for y in range(h0+1, h1-1):
            Cns[y][w1-1] = t+1
        mainct(h0+1, h1-1, w0, w1-1, t+1)
        return

h, w = map(int, input().split())
f = 0
if h > w:
    h, w = w, h
    f = 1
Ans = [[-1 for _ in range(w)] for _ in range(h)]
Bns = [[-1 for _ in range(w)] for _ in range(h)]
Cns = [[-1 for _ in range(w)] for _ in range(h)]

mainc(0, h, 0, w, 0)
maint(0, h, 0, w, 0)
mainct(0, h, 0, w, 0)

ma0 = ma1 = mb0 = mb1 = mc0 = mc1 = 0
for y in range(h):
    for x in range(w):
        ma0 = min(ma0, Ans[y][x])
        ma1 = max(ma1, Ans[y][x])
        mb0 = min(mb0, Bns[y][x])
        mb1 = max(mb1, Bns[y][x])
        mc0 = min(mc0, Cns[y][x])
        mc1 = max(mc1, Cns[y][x])

if f:
    Ans = [[Ans[y][x] for y in range(h)] for x in range(w)]
    Bns = [[Bns[y][x] for y in range(h)] for x in range(w)]
    Cns = [[Cns[y][x] for y in range(h)] for x in range(w)]

if ma0 == -1:
    print(-1)
else:
    print(ma1)
    for a in Ans:
        print(*a)

if mb0 == -1:
    print(-1)
else:
    print(mb1)
    for a in Bns:
        print(*a)

if mc0 == -1:
    print(-1)
else:
    print(mc1)
    for a in Cns:
        print(*a)
0