P に含まれる"o","x" の文字数 # r,s: 結合済み文字列に含まれる"x","o" の文字数 # f: 文字列 P の末尾が "o" なら 0, "x" なら 1 while $0 <= N # while q <= N: # 十分大きな文字列 P を計算する $5 = $0*K # p,q,f := q,q*K+p,1-f $5 = $5+$1 $1 = $0 $0 = $5 $4 = 1-$4 end # end while $1 > 1 # while p > 1: # "o" の文字数が N 文字になるまで処理 $5 = $0%$1 # p,q,f := q%p,p,1-f # P_{n+1},P_n から P_{n-1} を逆算する $0 = $1 $1 = $5 $4 = 1-$4 $5 = N-$3 # t := (N-s)//q # 何回繰り返しで文字列を追加できるか $5 = $5/$0 $6 = $5*$1 # r,s := r+p*t,s+q*t # P の文字列を t 回追加 $2 = $2+$6 $6 = $5*$0 $3 = $3+$6 if $3 == N # if s == N: $1 = 0 # p := 0 end # end end # end if $1 == 1 # if p == 1: $4 = 1-$4 # f,r,s = 1-f,r+(q-K)*(N-s),N $5 = $0-K $6 = N-$3 $5 = $5*$6 $2 = $2+$5 end # end $0 = $2-$4 # return (r-f+N) # 末尾が "x" で終わる場合(f=1) は 1 を引いて取り除く $0 = $0+N return $0 エスパー例 (文字列の構築) 正の整数列 に対し、 に属するものを o 、 に属するものを x でそれぞれ置き換 えた列 を考えます。 で文字列の連結、 で文字列の 回繰り返しを表 し、 x o とする と、 の時、 はそれぞれ の接頭辞となりま す。(連分数展開による近似分数の誤差解析によって正当 性を確かめられます) の場合の の文字列の例: o oox ooxooxo ooxooxoooxooxooox ooxooxoooxooxoooxooxooxoooxooxoooxooxooxo 列 に現れる 番目の o の位置 ( ) は で求めることができます。 コード37行・実行779ステップ https://yukicoder.me/submissions/1009457 yukicoder contest 448 問題解説 E: Strange Online Judge ★4.5 21