Member SRM 478 Div 1: Easy. CarrotJumping
問題
数直線上にうさぎがいる。 うさぎは数直線上の位置 $x$ にいるとき位置 $4x + 3$ あるいは位置 $8x + 7$ にジャンプできる。 体力の問題でうさぎは高々 $10^5$ 回のジャンプしかできない。 $\bmod 10^9 + 7$ で $0$ な位置まで移動できるか?
解法
問題となっている操作は関数 $f_2(x) = 4x + 3$ と関数 $f_3(x) = 8x + 7$ であるが、これらは $f_1(x) = 2x + 1$ を使って $f_2 = f_1^2$ および $f_3 = f_1^3$ と書ける。 $f_1$ を使って $5 \cdot 10^5$ 回ぐらい以内に $0$ まで移動できるかを確認すれば、その結果から答えは復元できる。 移動回数の上限 $L = 10^5$ と法 $M = 10^9+7$ を変数としてかつ加算や剰余は $O(1)$ だとすると、計算量は $O(\min { L, M })$ である。
メモ
- これ好き
- 一般の操作 ($5x + 12$ など) が足されても解けるか?
- $1024x + 1023$ みたいな操作なら足されても解ける
- $2x$ と $2x + 1$ みたいな関係にあれば解けそう?
- 「イデアルとしての和が単項イデアルならばよい」みたいな雰囲気の主張ができてほしさある
- 関数合成でなくて多項式の積だったなら可能だろうか?
- 「高々 $10^5$ 回しかジャンプできない」の制約を落としても解けるか?
- 離散対数問題にもなってないし難しそう
- それでも高々 $10^9+7$ 回見ればいいので埋め込める