結果
問題 |
No.1345 Beautiful BINGO
|
ユーザー |
![]() |
提出日時 | 2025-06-12 13:20:18 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 2,794 bytes |
コンパイル時間 | 187 ms |
コンパイル使用メモリ | 81,960 KB |
実行使用メモリ | 107,868 KB |
最終ジャッジ日時 | 2025-06-12 13:22:36 |
合計ジャッジ時間 | 7,496 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
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()