給定兩個正整數a
aa和b
bb,求[a,
b]
[a,b]
[a,b
]之間所有數字中0∼9
0\sim 9
0∼9出現的次數。前導0
00不許出現。
輸入格式:
輸入包含多組測試資料。每組測試資料佔一行,包含兩個整數a
aa和b
bb。當讀入一行為0 0
時,表示輸入終止,且該行不作處理。
輸出格式:
每組資料輸出乙個結果,每個結果佔一行。每個結果包含十個用空格隔開的數字,第乙個數字表示0
00出現的次數,第二個數字表示1
11出現的次數,以此類推。
資料範圍:
1 ≤a
,b
<10
81\le a, b< 10^8
1≤a,
b<10
8有多組測試資料
我們可以開個函式,專門計算[1,
x]
[1,x]
[1,x]中0∼9
0\sim 9
0∼9出現的次數,設這個函式是f(x
)f(x)
f(x)
,那麼[a,
b]
[a,b]
[a,b
]之間所有數字中0∼9
0\sim 9
0∼9出現的次數就是f(b
)−f(
a−1)
f(b)-f(a-1)
f(b)−f
(a−1
)。所以只需要考慮怎麼實現f(x
)f(x)
f(x)
這個函式。首先f(0
)=
0f(0)=0
f(0)=0
。接著考慮x
>0,
f(x)
x>0,f(x)
x>0,
f(x)
。我們列舉0∼9
0\sim 9
0∼9在各個位上出現的時候的計數。比如,我們想列舉k
∈k\in \
k∈在x =a
bcde
fg
‾x=\overline
x=abcd
efg
這個數字的d
dd這個位置出現的情況下,有多少種可能。分兩種情況討論:
1、如果k
kk的左邊是0∼a
bc‾−
10\sim \overline-1
0∼abc−
1,那麼k
kk右邊可以任意取,0
∼999
0\sim 999
0∼99
9都可以,此時方案數就是1000ab
c‾
1000\overline
1000ab
c;2、如果k
kk的左邊是abc
‾\overline
abc,這個時候要看k
kk和d
dd的關係:
如果k
k< d,那k kk右邊可以任意取,有1000 1000 1000 種情況; 如果k =d k=dk= d,那k kk右邊只能取0∼e fg ‾0\sim \overline 0∼efg ,有1 +e fg ‾1+\overline 1+efg 種情況; 如果k > dk>d k> d,則沒有可能,0 00種情況; 但是對於k=0 k=0k= 0的情形需要另外考慮,因為不能有前導0 00。首先列舉哪一位可以取k kk的時候,要略過最高位(它本身就是前導0 00了,要略過),接著,對於情況1 11,k kk的左邊的範圍變成了1∼a bc‾− 11\sim \overline-1 1∼abc− 1。注意考慮這個情況就行。**如下:#include
#include
using
namespace std;
// 求10的x次方
intpow10
(int x)
// 將num表示的正整數
intget
(vector<
int> num,
int l,
int r)
intcount
(int n,
int x)
n = num.
size()
;int res =0;
// 從最高位開始列舉如果x是當前位的話有多少個可能性;如果x = 0的話要略過最高位
for(
int i = n -1-
!x; i >=
0; i--)if
(num[i]
== x) res +
=get
(num, i -1,
0)+1
;else
if(num[i]
> x) res +
=pow10
(i);
}return res;
}int
main()
return0;
}每次查詢時間複雜度o
(log10
max
)o(\log_\max\)
o(log10
max)
,空間o
(log10
max
)o(\log_\max\)
o(log10
max)
。
AcWing 338 計數問題
acwing 338.計數問題 給定兩個整數 a 和 b,求 a 和 b 之間的所有數字中0 9的出現次數。例如,a 1024,b 1032,則 a 和 b 之間共有9個數如下 1024 1025 1026 1027 1028 1029 1030 1031 1032 其中 0 出現10次,1 出現1...
AcWing 338 計數問題(數字統計dp)
acwing 338.計數問題 給定兩個整數 a 和 b,求 a 和 b 之間的所有數字中0 9的出現次數。例如,a 1024,b 1032,則 a 和 b 之間共有9個數如下 1024 1025 1026 1027 1028 1029 1030 1031 1032 其中 0 出現10次,1 出現1...
計數問題(二)
計數問題 二 在上一講中,我們一起研究 列舉法 乘法原理 加法原理 在計數問題中的應用。但是,在實際的問題中,這些方法並不是單獨使用的。往往需要同時應用這幾種方法,這就需要我們搞清題意,根據已知條件,分別使用正確的方法,得到準確的結果。一 閱讀思考 例1.求720這個數約數的個數。分析與解 從1開始...