結果
問題 | No.5019 Hakai Project |
ユーザー |
![]() |
提出日時 | 2023-11-17 18:59:05 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 134 ms / 3,000 ms |
コード長 | 3,203 bytes |
コンパイル時間 | 297 ms |
コンパイル使用メモリ | 81,700 KB |
実行使用メモリ | 80,204 KB |
スコア | 54,275,855 |
最終ジャッジ日時 | 2023-11-17 18:59:18 |
合計ジャッジ時間 | 10,908 ms |
ジャッジサーバーID (参考情報) |
judge14 / judge13 |
純コード判定しない問題か言語 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 50 |
ソースコード
# import pypyjit;pypyjit.set_param("max_unroll_recursion=-1")import osimport sys# from bisect import *from collections import *# from datetime import *# from decimal import * # PyPyだと遅い# from heapq import *# from itertools import *# from math import gcd, lcm# from random import *# from string import *# import numpy as np# from atcoder.dsu import *# from atcoder.segtree import *# from more_itertools import *# from sortedcontainers import *# sys.setrecursionlimit(10**7) # PyPyは呪文を付ける# sys.set_int_max_str_digits(0)INF = 1 << 61MOD = 998244353# MOD = 10**9 + 7IS_ATCODER = os.getenv("ATCODER", 0)File = sys.stdindef input():return File.readline()[:-1]# ///////////////////////////////////////////////////////////////////////////def move(p1):global ans, harukuharuku = list(haruku)y2, x2 = p1while haruku[1] != x2:if haruku[1] < x2:ans.append([1, "R"])haruku[1] += 1else:ans.append([1, "L"])haruku[1] -= 1while haruku[0] != y2:if haruku[0] < y2:ans.append([1, "D"])haruku[0] += 1else:ans.append([1, "U"])haruku[0] -= 1haruku = tuple(haruku)def calc_dist(p1, p2):return abs(p1[0] - p2[0]) + abs(p1[1] - p2[1])def buy_bomb(p1):nxt = (INF, INF)for i in shop:dist = calc_dist(p1, i)if calc_dist(p1, nxt) > dist:nxt = imove(nxt)# print(A[haruku[0]][haruku[1]])for _ in range(50):for b in bomb[use][2]:ans.append([2, b])N, M = map(int, input().split())A = [list(input()) for _ in range(N)]bomb = []for i in range(M):C, L = map(int, input().split())bomb.append([C, set([tuple(map(int, input().split())) for _ in range(L)]), [i + 1]])for i in range(M):for j in range(i + 1, M):bomb.append([bomb[i][0] + bomb[j][0], bomb[i][1] | bomb[j][1], bomb[i][2] + bomb[j][2]])shop = set()building = set()for i in range(N):for j in range(N):if A[i][j] == "@":shop.add((i, j))elif A[i][j] == "#":building.add((i, j))# bomb.sort(key=lambda x:x[1]/x[0],reverse=True)mn = INFfor i in range(len(bomb)):if bomb[i][0] > mn:continues1 = set()s2 = set()for j, k in bomb[i][1]:if k >= 0:s1.add(j)if k <= 0:s2.add(j)if len(s1) == 41 and len(s2) == 41:use = imn = bomb[i][0]ans = deque()haruku = (0, 0)for start in [(20, 0), (40, 0)]:buy_bomb(haruku)move(start)for k in range(50):for b in bomb[use][2]:ans.append([3, b])for i, j in bomb[use][1]:shop.discard((haruku[0] + i, haruku[1] + j))try:A[haruku[0] + i][haruku[1] + j] = "."except IndexError:passif k == 49:breakans.append([1, "R"])haruku = (haruku[0], haruku[1] + 1)# print(haruku)# for i in A:# print("".join(i))print(len(ans))for i in ans:print(*i)