結果

問題 No.3733 My First Grid
コンテスト
ユーザー kidodesu
提出日時 2026-09-19 16:14:46
言語 PyPy3
(7.3.23 + ACL)
コンパイル:
pypy3 -mpy_compile _filename_
実行:
pypy3 _filename_
結果
RE  
実行時間 -
コード長 3,949 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 74 ms
コンパイル使用メモリ 82,400 KB
実行使用メモリ 153,324 KB
最終ジャッジ日時 2026-09-19 16:14:52
合計ジャッジ時間 5,438 ms
ジャッジサーバーID
(参考情報)
judge3_0 / judge1_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 2 RE * 1
other AC * 45 WA * 1 RE * 11
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

def main():
    h, w, k = list(map(int, input().split()))
    if k == 0:
        for y in range(h):
            print("."*w)
        return 
    if h == 1:
        if k == 1:
            print("#"+"."*(w-1))
        else:
            print(-1)
        return
    if w == 1:
        if k == 1:
            print("#")
            for y in range(h-1): print(".")
        else:
            print(-1)
        return
    if k == 1:
        print(-1)
        return
    if h == 2:
        if 2 <= k <= w:
            print("#"*(k-1)+"."*(w-k+1))
            print("."*w)
        else:
            print(-1)
        return
    if w == 2:
        if 2 <= k <= h:
            for _ in range(k-1):
                print("#.")
            for _ in range(h-k+1):
                print("..")
        else:
            print(-1)
        return
    if k == 2:
        print("#"+"."*(w-1))
        for _ in range(h-1):
            print("."*w)
        return
    if k == 3:
        print("##"+"."*(w-2))
        for _ in range(h-1):
            print("."*w)
        return
    if h % 2 or w % 2:
        f = 0
        if w % 2:
           h, w = w, h
           f = 1
        A = [[0 for _ in range(w)] + [1] for _ in range(h)] + [[1] * (w+1)]
        for y in range(h):
            A[y][0] = 1
        for x in range(w-1):
            A[h-1][x] = 1
        y, x = h-1, w-2
        dy = [1, 0, -1, 0]
        dx = [0, 1, 0, -1]
        di = 2
        E = []
        while 1:
            if not A[y][x]:
                E.append((y, x))
                A[y][x] = 1
            if A[y+dy[di]][x+dx[di]]: break
            if not A[y+dy[di]*2][x+dx[di]*2]:
                y, x = y+dy[di], x+dx[di]
            else:
                di = (di+1)%4
        
        a = 0
        for aa in A[:-1]:
            a += sum(aa[:-1])
        if 2*a+1-h-w+1 < k:
            print(-1)
            return
        assert 0
    else:
        A = [[0 for _ in range(w)] + [1] for _ in range(h)] + [[1] * (w+1)]
        y, x = 0, 1
        dy = [1, 0, -1, 0]
        dx = [0, 1, 0, -1]
        di = 0
        E = []
        while 1:
            if not A[y][x]:
                E.append((y, x))
                A[y][x] = 1
            if A[y+dy[di]][x+dx[di]]: break
            if A[y+dy[di]+dy[(di+1)%4]][x+dx[di]+dx[(di+1)%4]]: break
            if not A[y+dy[di]*2][x+dx[di]*2]:
                y, x = y+dy[di], x+dx[di]
            else:
                di = (di+1)%4
        a = 0
        for aa in A[:-1]:
            a += sum(aa[:-1])
        if k <= 2*a+1 :
            Ans = [["." for _ in range(w)] for _ in range(h)]
            if not k % 2:
                Ans[0][0] = "#"
                Ans[1][0] = "#"
            for i in range(k//2):
                y, x = E[i]
                Ans[y][x] = "#"
            for ans in Ans:
                print("".join(ans))
            return 
        h, w = w, h
        A = [[0 for _ in range(w)] + [1] for _ in range(h)] + [[1] * (w+1)]
        y, x = 0, 1
        dy = [1, 0, -1, 0]
        dx = [0, 1, 0, -1]
        di = 0
        E = []
        while 1:
            if not A[y][x]:
                E.append((y, x))
                A[y][x] = 1
            if A[y+dy[di]][x+dx[di]]: break
            if A[y+dy[di]+dy[(di+1)%4]][x+dx[di]+dx[(di+1)%4]]: break
            if not A[y+dy[di]*2][x+dx[di]*2]:
                y, x = y+dy[di], x+dx[di]
            else:
                di = (di+1)%4
        a = 0
        for aa in A[:-1]:
            a += sum(aa[:-1])
        if k <= 2*a+1:
            Ans = [["." for _ in range(w)] for _ in range(h)]
            if not k % 2:
                Ans[0][0] = "#"
                Ans[1][0] = "#"
            for i in range(k//2):
                y, x = E[i]
                Ans[y][x] = "#"
            Ans = [[Ans[y][x] for y in range(h)] for x in range(w)]
            for ans in Ans:
                print("".join(ans))
            return 
        print(-1)
        return

main()
0