結果
| 問題 |
No.1345 Beautiful BINGO
|
| コンテスト | |
| ユーザー |
gew1fw
|
| 提出日時 | 2025-06-12 18:34:54 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 2,794 bytes |
| コンパイル時間 | 231 ms |
| コンパイル使用メモリ | 82,816 KB |
| 実行使用メモリ | 107,612 KB |
| 最終ジャッジ日時 | 2025-06-12 18:35:08 |
| 合計ジャッジ時間 | 7,600 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 20 TLE * 1 -- * 40 |
ソースコード
import heapq
def main():
import sys
input = sys.stdin.read().split()
idx = 0
N = int(input[idx])
idx += 1
M = int(input[idx])
idx += 1
grid = []
for _ in range(N):
row = list(map(int, input[idx:idx+N]))
idx += N
grid.append(row)
lines_info = []
# Rows
for i in range(N):
cells = []
sum_line = 0
mask = 0
for j in range(N):
pos = i * N + j
cells.append((i, j))
sum_line += grid[i][j]
mask |= 1 << pos
lines_info.append((mask, sum_line, cells))
# Columns
for j in range(N):
cells = []
sum_line = 0
mask = 0
for i in range(N):
pos = i * N + j
cells.append((i, j))
sum_line += grid[i][j]
mask |= 1 << pos
lines_info.append((mask, sum_line, cells))
# Diagonals
# Top-left to bottom-right
cells = []
sum_line = 0
mask = 0
for i in range(N):
j = i
pos = i * N + j
cells.append((i, j))
sum_line += grid[i][j]
mask |= 1 << pos
lines_info.append((mask, sum_line, cells))
# Top-right to bottom-left
cells = []
sum_line = 0
mask = 0
for i in range(N):
j = N - 1 - i
pos = i * N + j
cells.append((i, j))
sum_line += grid[i][j]
mask |= 1 << pos
lines_info.append((mask, sum_line, cells))
heap = []
visited = {}
initial_mask = 0
initial_sum = 0
heapq.heappush(heap, (initial_sum, initial_mask))
visited[initial_mask] = initial_sum
while heap:
current_sum, current_mask = heapq.heappop(heap)
if visited.get(current_mask, float('inf')) < current_sum:
continue
count = 0
for mask, _, _ in lines_info:
if (current_mask & mask) == mask:
count += 1
if count >= M:
print(current_sum)
return
for i in range(len(lines_info)):
line_mask, _, cells = lines_info[i]
if (current_mask & line_mask) == line_mask:
continue
additional_sum = 0
for (x, y) in cells:
pos = x * N + y
if not (current_mask & (1 << pos)):
additional_sum += grid[x][y]
new_sum = current_sum + additional_sum
new_mask = current_mask | line_mask
if new_mask in visited:
if visited[new_mask] <= new_sum:
continue
visited[new_mask] = new_sum
heapq.heappush(heap, (new_sum, new_mask))
print(0)
if __name__ == '__main__':
main()
gew1fw