結果
| 問題 |
No.3378 Go Board
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2025-11-22 01:31:24 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 262 ms / 2,000 ms |
| コード長 | 3,274 bytes |
| コンパイル時間 | 330 ms |
| コンパイル使用メモリ | 82,736 KB |
| 実行使用メモリ | 80,800 KB |
| 最終ジャッジ日時 | 2025-11-22 01:31:35 |
| 合計ジャッジ時間 | 10,656 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 22 |
ソースコード
import sys
input = lambda :sys.stdin.readline()[:-1]
ni = lambda :int(input())
na = lambda :list(map(int,input().split()))
yes = lambda :print("yes");Yes = lambda :print("Yes");YES = lambda : print("YES")
no = lambda :print("no");No = lambda :print("No");NO = lambda : print("NO")
#######################################################################
"""
n が十分大きいとき
- k = 1 No
- k = 2 No
- k >= 3
#####
#
- 3 <= k <= n Yes
n = 5
####o
#ooo.
##o
#o
o
左下から2kマスで作る
"""
def solve(n, k):
if k * 2 > n * n:
return
if k == 1:
return
if k == 2:
if n == 2:
return [[1, 1], [0, 0]]
else:
return
if k <= n:
res = [[0] * n for i in range(n)]
for i in range(k-1):
res[0][i] = 1
res[1][0] = 1
return res
elif k == n * 2:
res = [[0] * n for i in range(n)]
for i in range(n):
res[1][i] = 1
res[2][i] = 1
return res
elif k == n * 2 + 1:
res = [[0] * n for i in range(n)]
for i in range(n):
res[1][i] = 1
res[2][i] = 1
res[2][0] = 0
res[3][0] = 1
res[3][1] = 1
return res
else:
res = [[0] * n for i in range(n)]
cnt = k
p, q = divmod(k * 2, n)
if q == 0:
p -= 1
q = n
# print(n, k, p, q)
for i in range(p):
res[i][q-1] = 1
cnt -= 1
i = p - 1
while i >= -1:
if i == -1:
i = 0
for j in range(q-1):
res[i][j] = 1
cnt -= 1
i -= 3
i = p - 2
while i >= -1:
if i == -1:
i = 0
for j in range(q, n):
res[i][j] = 1
cnt -= 1
i -= 3
for i in range(n):
for j in range(q-1, -1, -1):
if res[i][j] == 0 and cnt > 0:
res[i][j] = 1
cnt -= 1
for j in range(q, n):
if res[i][j] == 0 and cnt > 0:
res[i][j] = 1
cnt -= 1
return res
def check(n, k, res):
A = 0
B = 0
for i in range(n):
for j in range(n):
A += res[i][j]
if res[i][j] == 0:
ok = 0
for dx, dy in [[1, 0], [0, 1], [-1, 0], [0, -1]]:
x = i + dx
y = j + dy
if 0 <= x < n and 0 <= y < n and res[x][y]:
ok = 1
B += ok
# print(A, B)
return A == B == k
# for n in range(1, 100):
# for k in range(1, n * n):
# res = solve(n, k)
# if res is None:
# continue
# if not check(n, k, res):
# print(n, k)
# # for i in range(n):
# # print("".join([".#"[j] for j in res[i]]))
for _ in range(ni()):
n, k = na()
res = solve(n, k)
if res is None:
No()
else:
Yes()
for i in range(n):
print("".join([".#"[j] for j in res[i]]))
assert check(n, k, res)