結果
問題 | No.1949 足し算するだけのパズルゲーム(2) |
ユーザー |
|
提出日時 | 2022-11-21 17:03:46 |
言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
結果 |
TLE
|
実行時間 | - |
コード長 | 1,912 bytes |
コンパイル時間 | 220 ms |
コンパイル使用メモリ | 12,800 KB |
実行使用メモリ | 82,800 KB |
最終ジャッジ日時 | 2024-09-22 08:33:25 |
合計ジャッジ時間 | 5,902 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 7 TLE * 1 -- * 18 |
ソースコード
from bisect import bisect_left, insort_leftfrom itertools import productdef get_neighbor(board: list[list[int]], current_y: int, current_x: int) -> list[tuple[int, int, int]]:neighbor = []try:neighbor.append((board[current_y+1][current_x], current_y+1, current_x))except IndexError:passif current_y > 0:neighbor.append((board[current_y-1][current_x], current_y-1, current_x))try:neighbor.append((board[current_y][current_x+1], current_y, current_x+1))except IndexError:passif current_x > 0:neighbor.append((board[current_y][current_x-1], current_y, current_x-1))return neighbordef main():H, W, Y, X = map(int, input().split())board = [list(map(int, input().split())) for _ in range(H)]player_attack = board[Y-1][X-1]unvisited = set((board[y][x], y, x)for y, x in product(range(H), range(W)))visited = set()unvisited.remove((board[Y-1][X-1], Y-1, X-1))visited.add((board[Y-1][X-1], Y-1, X-1))neighbor = get_neighbor(board, Y-1, X-1)neighbor.sort(reverse=True)for enemy in neighbor:unvisited.remove(enemy)while neighbor:weakest_enemy = neighbor.pop()if weakest_enemy[0] >= player_attack:print("No")returnvisited.add(weakest_enemy)player_attack += weakest_enemy[0]weakest_enemy_neighbor = get_neighbor(board, weakest_enemy[1], weakest_enemy[2])for enemy_near_weakest in weakest_enemy_neighbor:if (enemy_near_weakest in visited) or (enemy_near_weakest in neighbor):continueinsort_left(neighbor, enemy_near_weakest,key=lambda enemy: -1 * enemy[0])print("Yes")if __name__ == "__main__":main()