ZJOI2010 count 數字計數

2021-08-09 22:43:35 字數 1604 閱讀 8740

description

給定兩個正整數

a 和

b,求在[a

,b] 中的所有整數中,每個數碼(digit)各出現了多少次。

input

輸入檔案中僅包含一行兩個整數

a 、

b,含義如上所述。

output

輸出檔案中包含一行10個整數,分別表示0-9在[a

,b] 中出現了多少次。

sample input

1 99

sample output

9 20 20 20 20 20 20 20 20 20

hint

30%的資料中,

a<=

b<=106

; 100%的資料中,

a<=

b<=

1012

source

day1

思路

第一次寫數字dp。。。顧名思義,數字dp就是對每個數字進行dp。一般來說,數字dp的適用範圍是求乙個區間[a

,b] 的值,其中

a 和

b會很大,而且值具有可加性。那麼對於每個值可以分成一些段,如:2333可以分成求0-999,1000-1999,2000-2299,2300-2329,2330-2333的值。對於這道題,黃學長部落格是這樣寫的:遞推出fi

,j,k

表示長度為

i 開頭

j的所有數字中

k 的個數。然後分段處理就好了。

**

#include 

#include

const

int maxn=12;

struct data

return res;

}};data f[maxn+1][10];

long

long t[maxn+1],a,b;

int init();

data calc(long

long n);

int main()

printf("%lld\n",y.num[9]-x.num[9]);

return0;}

int init()

for(int i=0; i<=9; i++)

for(int i=2; i<=12; i++)}}

return0;}

data calc(long

long n)

if(!n)

int len=log(n)/log(10)+1;

for(int i=1; ifor(int j=1; j<=9; j++)

}int h=n/t[len];

n%=t[len];

for(int i=1; i1;

for(int i=len-1; i>0; i--)

return ans;

}

ZJOI2010 數字計數

題目描述 給定兩個正整數a和b,求在 a,b 中的所有整數中,每個數碼 digit 各出現了多少次。輸入格式 輸入檔案中僅包含一行兩個整數a b,含義如上所述。輸出格式 輸出檔案中包含一行10個整數,分別表示0 9在 a,b 現了多少次。輸入輸出樣例 輸入 1 1 99 輸出 1 9 20 20 2...

ZJOI2010 數字計數

這道題題意清晰明了。最好的方法用字首差求,即 0,b 0,a 1 首先拆位把每位存到陣列中,並求出位數 l 然後把這些數當成 l 位進行統計,不足 l 位的先補字首 0 最後減去多餘的字首 0 即可。下面求 0,a 各個數出現次數的方法大體是 例如 0,1320 1320 中 l 為 4 第一位為 ...

ZJOI2010 數字計數

給定兩個正整數 a 和 b 求在 a,b 中的所有整數中,每個數碼 digit 各出現了多少次。輸入 1 99 輸出 9 20 20 20 20 20 20 20 20 20最近好像喜歡上數字dp了 這是乙個三維的dp 設 dp i j k 設從後往前填到第 i 位 這一位上的數字是 j k 這個數...