結果

問題 No.3733 My First Grid
コンテスト
ユーザー Kurao
提出日時 2026-09-19 15:28:29
言語 PyPy3
(7.3.23 + ACL)
コンパイル:
pypy3 -mpy_compile _filename_
実行:
pypy3 _filename_
結果
AC  
実行時間 76 ms / 2,000 ms
+ 957µs
コード長 4,114 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 90 ms
コンパイル使用メモリ 82,304 KB
実行使用メモリ 93,440 KB
最終ジャッジ日時 2026-09-19 15:28:39
合計ジャッジ時間 6,076 ms
ジャッジサーバーID
(参考情報)
judge1_1 / judge3_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 57
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

from __future__ import annotations
import sys
sys.setrecursionlimit(2*10**7)
#↓codon===============================
import string
Alp_low=list(string.ascii_lowercase)
Alp_up=list(string.ascii_uppercase)
Digit="0123456789"
dij=[[0,1],[1,0],[0,-1],[-1,0]]
def nin():
    return list(map(int,input().split()))
def deq(x):
    return [i-1 for i in x]
mod=998244353
_factorial=[1]
def factorial(n):
    while len(_factorial)<=n:
        _factorial.append((_factorial[-1]*len(_factorial))%mod)
    return _factorial[n]

_inv_factorial=[1]
def inv_factorial(n):
    while len(_inv_factorial)<=n:
        _inv_factorial.append((_inv_factorial[-1]*pow(len(_inv_factorial),mod-2,mod))%mod)
    return _inv_factorial[n]

def binom(n,r):
    if r>=mod:
        raise ValueError("r is too big")
    if n<0:
        return 0
    if r>n:
        return 0
    if r<0:
        return 0
    ans=((factorial(n)*inv_factorial(r))%mod*inv_factorial(n-r))%mod
    return ans

def main():
    h,w,k=nin()
    if k==0:
        for _ in range(h):
            print("#"*w)
        return
    elif h==1 and w==1:
        print(-1)
        return
    elif h==1:
        if k==1:
            print("."+"#"*(w-1))
        else:
            print(-1)
        return
    elif w==1:
        if k==1:
            print(".")
            for _ in range(h-1):
                print("#")
        else:
            print(-1)
        return

    def calc1(h,w,k):
        if not 2<=k<=h+w-2:
            return False,[[]]
        if k<=w:
            ans=[[] for _ in range(h)]
            for i in range(h):
                if i==0:
                    for j in range(k-1):
                        ans[i].append(".")
                    for j in range(w-(k-1)):
                        ans[i].append("#")
                    continue
                for j in range(w):
                    ans[i].append("#")
            return True,ans
        else:
            ans=[[] for _ in range(h)]
            for i in range(h):
                if i==0:
                    for j in range(w):
                        ans[i].append(".")
                    continue
                for j in range(w):
                    if j==0 and i<=k-w:
                        ans[i].append(".")
                    else:
                        ans[i].append("#")
            return True,ans

    def calc2(h,w,k):
        if k<h:
            return False,[[]]
        ans=[["#"]*w for _ in range(h)]
        for i in range(h):
            ans[i][0]="."
        rem=k-h
        for i in range(0,h,2)[::-1]:
            for j in range(1,w-1):
                if i in [0,h-1]:
                    x=1
                else:
                    x=2
                if rem-x>=0:
                    ans[i][j]="."
                    rem-=x
        if rem!=0:
            return False,[[]]
        else:
            return True,ans


    def calc3(h,w,k):
        fl,ans=calc2(w,h,k)
        if fl==False:
            return fl,ans
        new=[[ans[j][i] for j in range(w)] for i in range(h)]
        return fl,new

    def calc4(h,w,k):
        if k<2*w-2 or h<3 or w<3:
            return False,[[]]
        ans=[["#"]*w for _ in range(h)]
        for i in range(1,w-1):
            ans[1][i]="."
        ans[0][1]="."
        rem=k-(2*w-2)
        for j in range(1,w-1,2)[::-1]:
            for i in range(2,h):
                if i==h-1:
                    x=1
                else:
                    x=2
                if rem-x>=-1:
                    ans[i][j]="."
                    rem-=x
        print(rem)
        for i in ans:
            print("".join(i))
        if rem==-1 and w>=4:
            ans[0][2]="."
        if rem!=0:
            return False,[[]]
        else:
            return True,ans

    fl,ans=calc1(h,w,k)
    if fl:
        for i in ans:
            print("".join(i))
        return
    fl,ans=calc2(h,w,k)
    if fl:
        for i in ans:
            print("".join(i))
        return
    fl,ans=calc3(h,w,k)
    if fl:
        for i in ans:
            print("".join(i))
        return
    print(-1)

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