結果
| 問題 | No.883 ぬりえ |
| コンテスト | |
| ユーザー |
はむ吉🐹
|
| 提出日時 | 2019-09-13 22:02:42 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,367 bytes |
| 記録 | |
| コンパイル時間 | 94 ms |
| コンパイル使用メモリ | 12,928 KB |
| 実行使用メモリ | 28,416 KB |
| 最終ジャッジ日時 | 2024-07-04 09:42:09 |
| 合計ジャッジ時間 | 3,675 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 WA * 1 |
| other | AC * 8 WA * 11 |
ソースコード
#!/usr/bin/env python3
import itertools
import math
def div_ceil(a, b):
return (a + b - 1) // b
def sqrt_ceil(a):
return math.ceil(math.sqrt(a) - 0.00001)
def trim(board):
m = len(board)
new_m = m
for i in range(1, m)[::-1]:
c1 = all(board[i][j] == "." for j in range(i))
c2 = all(board[j][i] == "." for j in range(i))
c3 = board[i][i] == "."
if c1 and c2 and c3:
new_m = i
else:
break
new_board = [[board[j][i] for i in range(new_m)] for j in range(new_m)]
return new_m, new_board
def construct(n, k):
rest = n
m = max(div_ceil(n, k), n)
board = [["." for _ in range(m)] for _ in range(m)]
for i in range(0, m, k):
num_put = min(k * k, rest)
if num_put:
size = sqrt_ceil(num_put)
else:
size = 0
for dr, dc in itertools.product(range(size), repeat=2):
r, c = i + dr, i + dc
if 0 <= r < m and 0 <= c < m and num_put > 0:
board[r][c] = "#"
num_put -= 1
rest -= num_put
new_m, new_board = trim(board)
return new_m, new_board
def main():
n, k = (int(z) for z in input().split())
m, board = construct(n, k)
print(m)
print(*("".join(line) for line in board), sep="\n")
if __name__ == "__main__":
main()
はむ吉🐹