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 這個數...