數字DP 數字統計

2022-05-05 16:18:10 字數 722 閱讀 7804

題目

給定兩個正整數a和b,求在[a,b]中的所有整數中,每個數碼(digit)各出現了多少次。

數字dp

(1)分情況,逐位討論。

(2)模型:計算在[l,r]中有多少個數滿足條件。

(3)套路:將問題轉化為[1,r]-[1,l-1],只需回答[1,x]的詢問即可。

思路1.算出[1,x]:

(1)按位拆分,為後面做鋪墊

(2)預處理:

1)pow表示10的次冪

2)f表示:後i位自由的話每個數字出現的次數

ps:有乙個規律。0~9每個數字出現1次,10~99出現20次,100~999出現300次。出現次數為:n*10^(n-1)(n為位數)

(3)處理比x少一位的情況

從0~9共10個數。同位數計算10次,加上pow[i-1]即可。

(4)處理全部位數

從最高位到最低位。比如abcde,a會出現bcde+1次,以此類推。

2.將第一遍算出的答案全部*(-1),就相當於減去。

#includeusing namespace std;

long long ans[10],f[20],pow[20];

int p[20],l;

void deal(long long x, long long y)

void calc(long long x)

poj 3252 數字dp 數字統計)

就是統計每個數不算本身的round數,具體解法如下 前前後後做過三遍,每一次都wa了好多次 dp解法 include include include include define max 40 using namespace std typedef int ll ll dp max max void...

bzoj 3780 數字統計 (數字dp)

time limit 10 sec memory limit 128 mb submit 50 solved 27 submit status discuss 小a正在研究一些數字統計問題。有一天他突然看到了乙個這樣的問題 將 l.r 中的所有整數用m位二進位制數表示 允許出現前導0 現在將這些數中...

LuoGu P1179 數字統計 數字DP

題目鏈結 這道題的資料範圍要暴力很容易,但是如果資料範圍變大,比如10 100那麼數字dp無疑是最好的,簡單的複習一下數字dp。數字dp講解 define inf 0x3f3f3f3f define ll long long define vec vector define p pair defin...