タイトル説明
ウィンディはAで、知りたいとB 、Aを含む、間及びB、どのように多くのウィンディ数の合計?
入力形式
出力フォーマット
サンプル
データ範囲とヒント
データの20%6 ^1≤A≤B≤10を満たす。、10 0%のデータを満たす 1≤A≤B≤2* 10 ^ 9。
コード:
#include <cmath> の#include <cstdioを> する#include <CStringの> する#include <iostreamの> する#include <アルゴリズム> 名前空間STDを使用して、 CONST int型N = 110。 長い長いPO [N]。 INT F [N] [N]、ANS、B。 ボイドプレ(){ PO [0] = 1。 以下のために(INT i = 1; iは= 12 <; I ++) 経口[I] = PO [I-1] * 10。 (;私は= 9 <I ++はiが0 = INT)のための [1] F [I] = 1。 以下のために(INT I = 2、iは<= 11; I ++) のための(INT J = 0であり、j <= 9; J ++) のための(INT K = 0; K <= 9; ++ K) IF(ABS(JK)> = 2) F [I] [J] + = F [I-1] [K]。 } int型の作業(INT X){ int型、W = 0、ANS = 0。 (PO [W] <= x)の一方 W ++。 以下のために(INT i = 1; iはW <; iは++) (INT J = 1; J <= 9; J ++)のために INT Y = X / PO [W-1]。 (; iがyと<I ++はiは1 = INT)のために 、ANS + = [I] [W] F 今のyを= int型。 X%= PO [W-1]。 以下のために(INT I = W-1; I> = 1; i--){ Y = X / PO [I-1]; <;(j ++ Y J INT J = 0)のための IF(ABS(J-NOW)= 2)> ANS + = [I] [J] F。 (ABS(今-Y)<2)であれば ブレーク。 今Yは=。 X%= PO [I-1]; } 戻りANS。 } int型のmain(){ scanf関数( "%D%dの"、&、&B)。 プレ()。 printf( "%d個の\ n"、ワーク(B + 1)-work(a)参照)。 0を返します。 }