ABC#007 D.禁止された数字
問題
整数A,Bについて、A〜Bの整数で、4または9を含む整数はいくつあるか?
A,B<=10^18
考え方
例えば123という数字以下の4,9を含む整数の数を求めたいと考える。
一桁目が0の時は00〜99まででカウントした場合の数になる。
一桁目が1の時は、00〜23まででカウントした場合の数になり、二桁目が0,1の時は0〜9、2の時は0〜3まででカウントした場合の数になっている。
したがって、dp[桁][00...00〜99...99(全部求める場合)か、00...00〜WX...YZ(途中まで求める場合)か]といういうものを考えると、
・00...00〜99...99(全部求める)までの場合
・その桁が4か9なら10^{残りの桁}を加算
・それ以外なら、次の桁について同様に計算したものを加算
・00...00〜WX...YZ(途中まで求める)までの場合
・その桁が4か9で、Wでなければ、10^{残りの桁}、Wならば、整数「X..YZ」を加算
・それ以外ならば、Wでなければ、次の桁について00..00〜99..99(全部求める)の場合と同様に求め加算、Wならば、00...00〜X...YZ(途中まで求める)の場合と同様に求めて加算
の関係になっている。
Bについて求めて、A-1について求めたものを引けば、A〜Bのものを求められる。