LOJ番号10165.「5.3例3パス」数ウィンディ

タイトル説明

SCOI 2009:オリジナルタイトルから

先行ゼロなし、及び少なくとも二つの隣接する2つの数値の差:それはウィンディウィンディの数を定義する正の整数は、ウィンディ番号と呼ばれています。

ウィンディはAで、知りたいとB 、Aを含む、間及びB、どのように多くのウィンディ数の合計?

入力形式

2つのライン数、それぞれ、A、B

出力フォーマット

出力答えを表す整数。

サンプル

サンプル入力1

1 10

サンプル出力1

9

サンプル入力2

25 50

サンプル出力2

20

データ範囲とヒント

データの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を返します。
}

 

おすすめ

転載: www.cnblogs.com/mysh/p/11247342.html