F定義された状態が[I] [j]は[k]が[x]はxよりも大きいビットを有する数字のT I jの数を示し、k個のビットはxに等しいが、許容できない複雑さは、F [i]が[の状態を変更することが見出されてもよいですJ] [x]は、iはXプログラムに等しい桁数よりも大きいフロントJを有する迅速に転送することができます
1つの#include <ビット/ STDC ++ H> 2 使用して 名前空間STDを、 3 の#define MOD十億七 4 int型 N、ANS、F [ 1005 ] [ 1005 ] [ 11 ] [ 2 ]。 5 チャー S [ 1005 ]。 6 INT メイン(){ 7 のscanf(" %sの" 、S); 8 N =のSTRLEN(S) 図9は、 のために(int型 i = 0 ; iは< 10 ; iは++)[F 0 ] [ 0] [I] [ 0 ] = 1 。 10 のために(int型 I = 0 ; iがN <; Iは++ ){ 11 のint、P =(S [I] - ' 0 ' )。 12 のための(int型 J = 0 ; J <= I; J ++ ) 13 のための(INT K = 0、K < 10 ; kは++ ) 14 のための(INT L = 0、L < 2 ; L ++ ) 15 のための(INT T = 0; T <= MAX(P、9 * 1); T ++ ){ 16 F [I + 1 ] [j +(K <= T)] [K] [L |(T <P)] + = F [i]が[ J] [K] [L]。 17 F [I + 1 ] [j +(K <= T)] [K] [L |(T <P)]%= MOD。 18 } 19 } 20 のために(INT I = 1、S = 0 ; iが<= N; iは++ ){ 21個 のS =を(10LL * S + 1)%MOD。 22 のために(INT J = 1 ; J < 10 ; J ++ ) 23 のための(int型のk = 0 ; K < 2 ; kは++)ANS =(ANS + 1LL * S * F [N] [I] [J] [K])%MOD。 24 } 25 のprintf(" %dの" 、ANS)。 26 }