結果
| 問題 | No.2744 Power! or +1 |
| コンテスト | |
| ユーザー |
PNJ
|
| 提出日時 | 2024-04-20 13:56:02 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
MLE
|
| 実行時間 | - |
| コード長 | 1,365 bytes |
| 記録 | |
| コンパイル時間 | 261 ms |
| コンパイル使用メモリ | 82,044 KB |
| 実行使用メモリ | 1,298,520 KB |
| 最終ジャッジ日時 | 2024-10-12 09:28:31 |
| 合計ジャッジ時間 | 8,650 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | -- * 2 |
| other | MLE * 1 -- * 8 |
ソースコード
import heapq
def dijkstra(s, n, edge):
dist = [float("Inf")]*n
dist[s] = 0
hq = [[0,s]]
heapq.heapify(hq)
while len(hq) > 0:
d,i = heapq.heappop(hq)
if dist[i] < d:
continue
for j,d_1 in edge[i]:
if dist[j] > (dist[i] + d_1):
dist[j] = dist[i] + d_1
heapq.heappush(hq, [dist[j],j])
return dist
N,A,B,C = map(int,input().split())
fact = [1]
for i in range(1,N+1):
f = fact[-1]*i
f %= N
fact.append(f)
G = [[] for i in range(2*N)]
for x in range(1,N):
G[N+x].append((0,C))
G[N].append((0,0))
for x in range(1,2*N):
G[x].append(((x+1) % (2*N),A))
for x in range(2,N):
f = 0
for k in range(2,41):
if f == 0:
xx = pow(x,k)
if xx >= N:
f = 1
else:
xx = pow(x,k,N)
if pow(B,k) >= A*N:
break
if xx % N == 0:
G[x].append((0,pow(B,k)))
G[x+N].append((0,pow(B,k)))
break
if f:
G[x].append((N+(xx%N),pow(B,k)))
else:
G[x].append((xx,pow(B,k)))
G[x+N].append((N + xx % N,pow(B,k)))
if fact[x] == 0:
G[x].append((0,C))
continue
if x >= 9:
G[x].append((N + fact[x],C))
else:
f = 1
for i in range(1,x+1):
f *= i
if f > N:
G[x].append((N + (f % N),C))
else:
G[x].append((f,C))
dist = dijkstra(1, 2*N, G)
print(dist[0])
PNJ