結果

問題 No.1880 Many Ways
ユーザー taiga0629kyoprotaiga0629kyopro
提出日時 2022-03-29 13:56:34
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 48 ms / 2,000 ms
コード長 1,751 bytes
コンパイル時間 258 ms
コンパイル使用メモリ 82,048 KB
実行使用メモリ 53,632 KB
最終ジャッジ日時 2024-11-08 02:34:02
合計ジャッジ時間 15,123 ms
ジャッジサーバーID
(参考情報)
judge5 / judge3
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 41 ms
52,756 KB
testcase_01 AC 42 ms
52,736 KB
testcase_02 AC 43 ms
52,864 KB
testcase_03 AC 42 ms
52,864 KB
testcase_04 AC 45 ms
52,608 KB
testcase_05 AC 44 ms
52,992 KB
testcase_06 AC 43 ms
53,352 KB
testcase_07 AC 43 ms
53,504 KB
testcase_08 AC 45 ms
53,376 KB
testcase_09 AC 44 ms
53,376 KB
testcase_10 AC 44 ms
53,504 KB
testcase_11 AC 48 ms
53,600 KB
testcase_12 AC 45 ms
53,632 KB
testcase_13 AC 44 ms
53,504 KB
権限があれば一括ダウンロードができます

ソースコード

diff #




########################################
from heapq import heappush, heappop
def dijkstra( G, s, INF=10 ** 18):
    """
    https://tjkendev.github.io/procon-library/python/graph/dijkstra.html
    O((|E|+|V|)log|V|)
    V: 頂点数
    G[v] = [(nod, cost)]:
        頂点vから遷移可能な頂点(nod)とそのコスト(cost)
    s: 始点の頂点"""

    N=len(G)
    N+=1
    dist = [INF] * N
    hp = [(0, s)]  # (c, v)
    dist[s] = 0
    cnt=[0]*N
    cnt[s]=1
    while hp:
        c, v = heappop(hp)  #vまで行くコストがc
        if dist[v] < c:
            continue
        for u, cost in G[v]:
            if dist[v] + cost < dist[u]:
                dist[u] = dist[v] + cost
                cnt[u]=cnt[v]
                heappush(hp, (dist[u], u))
            elif dist[v]+cost==dist[u]:
                cnt[u]+=cnt[v]
    return dist,cnt
##################################################





a=int(input())
if a==0:
    print(2,0)
    exit()
if a==1:
    print(1,0)
    exit()
if a==3:
    print(5,6)
    for i in range(2,5):
        print(1,i)
        print(i,5)
    exit()
k=1
while 2**(k+1)<=a:k+=1

n=128
ans=[]
root=[[] for i in range(n+1)]
def add(u,v):
    ans.append((u,v))
    root[u].append((v,1))
    root[v].append((u,1))

add(1,2)
add(1,3)
for i in range(1,k):
    add(2*i,2*i+2)
    add(2*i,2*i+3)
    add(2 * i+1, 2 * i + 2)
    add(2 * i+1, 2 * i + 3)

add(2*k,n)
add(2*k+1,n)
add(1,2*k+2)
for i in range(1,k):
    add(2*k+i+1,2*k+i+2)
a-=2**k
for i in range(k,-1,-1):
    if a>=2**i:
        if i==k-1:
            add(1,126)
            add(1,127)
            add(126,4)
            add(127,4)
        else:
            add(2*k+k-i,2*(k-i)+1)
        a-=2**i

print(n,len(ans))
for x,y in ans:print(x,y)
0