Slide 21
Slide 21 text
$0 = 1 # q,p,r,s,f = 1,0,0,0,0 # q,p:
文字列 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