結果
問題 | No.1352 Three Coins |
ユーザー | marroncastle |
提出日時 | 2021-01-20 22:53:45 |
言語 | PyPy3 (7.3.15) |
結果 |
WA
|
実行時間 | - |
コード長 | 3,924 bytes |
コンパイル時間 | 883 ms |
コンパイル使用メモリ | 82,004 KB |
実行使用メモリ | 77,344 KB |
最終ジャッジ日時 | 2024-06-06 03:28:37 |
合計ジャッジ時間 | 3,700 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 48 ms
54,784 KB |
testcase_01 | AC | 47 ms
55,296 KB |
testcase_02 | AC | 58 ms
62,848 KB |
testcase_03 | AC | 51 ms
55,040 KB |
testcase_04 | AC | 48 ms
55,680 KB |
testcase_05 | AC | 50 ms
55,552 KB |
testcase_06 | AC | 104 ms
77,024 KB |
testcase_07 | WA | - |
testcase_08 | AC | 107 ms
77,344 KB |
testcase_09 | AC | 57 ms
63,512 KB |
testcase_10 | AC | 78 ms
73,088 KB |
testcase_11 | AC | 55 ms
61,568 KB |
testcase_12 | WA | - |
testcase_13 | AC | 55 ms
62,464 KB |
testcase_14 | AC | 108 ms
77,312 KB |
testcase_15 | AC | 59 ms
64,000 KB |
testcase_16 | WA | - |
testcase_17 | AC | 48 ms
55,424 KB |
testcase_18 | AC | 60 ms
64,128 KB |
testcase_19 | WA | - |
testcase_20 | WA | - |
testcase_21 | AC | 118 ms
77,160 KB |
testcase_22 | WA | - |
testcase_23 | WA | - |
testcase_24 | AC | 48 ms
55,168 KB |
testcase_25 | WA | - |
testcase_26 | WA | - |
testcase_27 | AC | 48 ms
54,656 KB |
testcase_28 | AC | 94 ms
76,620 KB |
testcase_29 | AC | 48 ms
54,912 KB |
testcase_30 | AC | 105 ms
77,180 KB |
testcase_31 | AC | 48 ms
55,040 KB |
testcase_32 | AC | 89 ms
77,056 KB |
testcase_33 | WA | - |
testcase_34 | AC | 47 ms
54,528 KB |
testcase_35 | AC | 48 ms
54,656 KB |
ソースコード
import sys input = sys.stdin.readline from collections import deque import heapq class Graph: def __init__(self, N, M=-1): self.V = N if M>=0: self.E = M self.edge = [[] for _ in range(self.V)] self.edge_rev = [[] for _ in range(self.V)] self.order = [] self.to = [0]*self.V self.visited = [False]*self.V self.dp = [0]*self.V def add_edges(self, ind=1, bi=False, rev=False): for i in range(self.E): a,b = map(int, input().split()) a -= ind; b -= ind self.edge[a].append(b) if rev: self.edge_rev[b].append(a) self.to[b] += 1 if bi: self.edge[b].append(a) def add_edge(self, a, b, d, bi=False, rev=False): self.edge[a].append((d, b)) if rev: self.edge_rev[b].append(a) if bi: self.edge[b].append((d, a)) def dfs_rec(self, v): if self.visited[v]: return self.dp[v] for u in self.edge[v]: self.dp[v] += self.dfs_rec(u, v) self.visited[v] = True return self.dp[v] def topo_sort(self): #topological sort updated = [0]*self.V for start in range(self.V): if self.to[start] or updated[start]: continue stack = deque([start]) while stack: v = stack.popleft() self.order.append(v) updated[v] = 1 for u in self.edge[v]: self.to[u] -= 1 if self.to[u]: continue stack.append(u) def dp(self): #トポソしてから # self.dp = [0]*self.V for v in self.order: #行きがけ for u in self.edge[v]: self.dp[u] = max(self.dp[u], self.dp[v]+1) #配るDP for v in self.order[::-1]: #帰りがけ for u in self.edge_rev[v]: self.dp[u] = max(self.dp[u], self.dp[v]+1) #配るDP def bfs(self, start): d = deque([start]) self.min_cost = [-1]*self.V; self.min_cost[start]=0 while len(d)>0: v = d.popleft() for w in self.edge[v]: if self.min_cost[w]==-1: self.min_cost[w]=self.min_cost[v]+1 d.append(w) return #O(ElogV),頂点数10**5以下 def dijkstra_heap(self,s): self.dists = [float('inf')] * self.V; self.dists[s] = 0 used = [False] * self.V; used[s] = True vlist = [] #vlist : [sからの暫定(未確定)最短距離,頂点]のリスト #edge[s] : sから出る枝の[重み,終点]のリスト for e in self.edge[s]: heapq.heappush(vlist,e) #sの隣の点は枝の重さがそのまま暫定最短距離となる while len(vlist): #まだ使われてない頂点の中から最小の距離のものを探す→確定させる d,v = heapq.heappop(vlist) #[d,v]:[sからの(確定)最短距離,頂点] if used[v]: continue self.dists[v] = d; used[v] = True for d,w in self.edge[v]: if not used[w]: heapq.heappush(vlist,(self.dists[v]+d,w)) #O(ElogV),重みが整数の場合のみ def dijkstra_fast(self,s,mod): self.dists = [float('inf')] * self.V; self.dists[s] = 0 #始点sから各頂点への最短距離 used = [False] * self.V; used[s] = True vlist = [] #vlist : [sからの暫定(未確定)最短距離,頂点]のリスト #edge[s] : sから出る枝の[重み,終点]のリスト for w,v in self.edge[s]: heapq.heappush(vlist,w*mod+v) #sの隣の点は枝の重さがそのまま暫定最短距離となる while len(vlist): #まだ使われてない頂点の中から最小の距離のものを探す→確定させる #d, v : sからの(確定)最短距離, 頂点 d,v = divmod(heapq.heappop(vlist),mod) if used[v]: continue self.dists[v] = d; used[v] = True for d,w in self.edge[v]: if not used[w]: heapq.heappush(vlist,(self.dists[v]+d)*mod+w) A = list(map(int, input().split())) A.sort() G = Graph(A[0]) for i in range(A[0]): G.add_edge(i, (i+A[1])%A[0], (i+A[1])//A[0]) G.add_edge(i, (i+A[2])%A[0], (i+A[2])//A[0]) G.dijkstra_heap(0) print(sum(G.dists))