Clipped Collatz Cost

2 secs 1024 MB
yuki4869's icon yuki4869

解説

1,2,,K1,2,\ldots,K を頂点とする重み付き有向グラフを考えます。

各整数 xx から、操作 11 後の値 min(3x+1,K)\min(3x+1,K) と、操作 22 後の値 x/2\left\lceil x/2\right\rceil への辺を張り、その重みを操作にかかるコストとします。

このグラフにおいて、CiC_i は頂点 ii から頂点 11 までの最短距離です。しかし、各 ii から個別に最短路を求めると時間がかかります。

そこで、すべての辺の向きを反転します。元のグラフにおける ii から 11 への経路は、反転後のグラフにおける 11 から ii への経路と一対一に対応し、コストも変わりません。

したがって、反転後のグラフで頂点 11 を始点としてダイクストラ法を行えば、頂点 ii までの最短距離として CiC_i を求められます。

反転後の辺は、各 x=1,2,,Kx=1,2,\ldots,K について次のように追加できます。

  • y=min(3x+1,K)y=\min(3x+1,K) とし、yy から xx へ、xx が奇数なら重み 11、偶数なら重み 22 の辺を張る。
  • y=x/2y=\left\lceil x/2\right\rceil とし、yy から xx へ、xx が偶数なら重み 11、奇数なら重み 22 の辺を張る。

コストは操作前の値によって決まるため、どちらの場合も xx の偶奇を用いることに注意します。

最後に、各 i=1,2,,Ni=1,2,\ldots,N について CiC_i を調べ、対応する ACiA_{C_i}11 増やします。

また、操作 22 だけを繰り返しても必ず 11 に到達できます。iK218i\leq K\leq2^{18} なので、操作回数は高々 1818 回であり、各操作のコストは高々 22 です。したがって、すべての ii について Ci36C_i\leq36 が成り立ちます。

計算量は、ダイクストラ法を用いると O(KlogK)O(K\log K) です。