結果
| 問題 |
No.2744 Power! or +1
|
| コンテスト | |
| ユーザー |
PNJ
|
| 提出日時 | 2024-04-20 14:34:31 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 2,969 ms / 3,000 ms |
| コード長 | 1,481 bytes |
| コンパイル時間 | 283 ms |
| コンパイル使用メモリ | 82,000 KB |
| 実行使用メモリ | 304,208 KB |
| 最終ジャッジ日時 | 2024-10-12 10:08:55 |
| 合計ジャッジ時間 | 10,171 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 9 |
ソースコード
import heapq
def dijkstra(s, n, edge):
dist = [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())
inf = min((N-1)*A,2*A+4*C)
fact = [1]
f = 1
for i in range(1,N+1):
f = f*i % N
fact.append(f)
P = [2,3,5,7,11,13,17,19]
B = [min(inf,pow(B,P[i])) for i in range(len(P))]
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 i in range(len(P)): # 素数乗だけでいい
k = P[i]
if f == 0:
xx = pow(x,k)
if xx >= N:
f = 1
xx %= N
else:
xx = pow(x,k,N)
b = B[i]
if b >= inf:
break
if xx % N == 0:
G[x].append((0,b))
G[x+N].append((0,b))
break
if f:
G[x].append((N+xx,b))
else:
G[x].append((xx,b))
G[x+N].append((N + xx,b))
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 + fact[x],C))
else:
G[x].append((fact[x],C))
dist = dijkstra(1, 2*N, G)
print(dist[0])
PNJ