結果

問題 No.2958 Placing Many L-s
ユーザー 👑 binapbinap
提出日時 2024-10-22 05:26:21
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 160 ms / 2,000 ms
コード長 2,093 bytes
コンパイル時間 328 ms
コンパイル使用メモリ 82,432 KB
実行使用メモリ 81,664 KB
最終ジャッジ日時 2024-11-08 20:50:34
合計ジャッジ時間 5,823 ms
ジャッジサーバーID
(参考情報)
judge5 / judge4
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 40 ms
52,608 KB
testcase_01 AC 39 ms
52,352 KB
testcase_02 AC 40 ms
52,736 KB
testcase_03 AC 88 ms
78,336 KB
testcase_04 AC 86 ms
78,080 KB
testcase_05 AC 98 ms
80,128 KB
testcase_06 AC 39 ms
52,736 KB
testcase_07 AC 92 ms
76,672 KB
testcase_08 AC 43 ms
54,272 KB
testcase_09 AC 85 ms
76,800 KB
testcase_10 AC 75 ms
71,552 KB
testcase_11 AC 96 ms
76,800 KB
testcase_12 AC 87 ms
76,416 KB
testcase_13 AC 88 ms
76,544 KB
testcase_14 AC 88 ms
76,544 KB
testcase_15 AC 132 ms
77,312 KB
testcase_16 AC 92 ms
76,928 KB
testcase_17 AC 94 ms
76,672 KB
testcase_18 AC 40 ms
52,480 KB
testcase_19 AC 93 ms
80,000 KB
testcase_20 AC 89 ms
79,360 KB
testcase_21 AC 40 ms
52,352 KB
testcase_22 AC 93 ms
79,744 KB
testcase_23 AC 38 ms
52,352 KB
testcase_24 AC 160 ms
77,056 KB
testcase_25 AC 118 ms
77,184 KB
testcase_26 AC 117 ms
76,928 KB
testcase_27 AC 120 ms
76,672 KB
testcase_28 AC 147 ms
81,664 KB
testcase_29 AC 86 ms
76,544 KB
testcase_30 AC 48 ms
54,912 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

def solve():
    n, m = map(int, input().split())
    FLIP = False

    def v2(x):
        res = 0
        while x % 2 == 0:
            res += 1
            x //= 2
        return res

    if v2(n) + v2(m) <= 2:
        print("-1")
        return

    if v2(n) > v2(m):
        n, m = m, n
        FLIP = True

    cnt = 0
    a = [[0] * m for _ in range(n)]
    B = [[1, 1, 1, 2], [1, 2, 2, 2]]

    def set_B(si, sj):
        nonlocal cnt
        for di in range(2):
            for dj in range(4):
                a[si + di][sj + dj] = cnt + B[di][dj]
        cnt += 2

    C = [
        [1, 1, 3, 3, 3, 4, 6, 6],
        [1, 2, 3, 4, 4, 4, 5, 6],
        [1, 2, 2, 2, 5, 5, 5, 6]
    ]

    def set_C(si, sj):
        nonlocal cnt
        for di in range(3):
            for dj in range(8):
                a[si + di][sj + dj] = cnt + C[di][dj]
        cnt += 6

    # case (II)
    if v2(n) >= 1 and v2(m) >= 2:
        k = n * m // 4
        for i in range(n // 2):
            for j in range(m // 4):
                set_B(i * 2, j * 4)
        print(k)
        if FLIP:
            a_old = [[0] * n for _ in range(m)]
            for i in range(n):
                for j in range(m):
                    a_old[j][i] = a[i][j]
            a, n, m = a_old, m, n
        for row in a:
            print(" ".join(map(str, row)))
        return

    # case (III)
    if v2(n) == 0 and v2(m) >= 3:
        if n == 1:
            print("-1")
            return
        k = n * m // 4
        for i in range(n // 2 - 1):
            for j in range(m // 4):
                set_B(i * 2, j * 4)
        for j in range(m // 8):
            set_C(n - 3, j * 8)
        print(k)
        if FLIP:
            a_old = [[0] * n for _ in range(m)]
            for i in range(n):
                for j in range(m):
                    a_old[j][i] = a[i][j]
            a, n, m = a_old, m, n
        for row in a:
            print(" ".join(map(str, row)))
        return

    assert False


def main():
    t = int(input())
    for _ in range(t):
        solve()


if __name__ == "__main__":
    main()
0