LuoGu P1239計數器 強大的貢獻

2022-05-01 15:30:13 字數 1069 閱讀 4747

p1239 計數器

題意:就是求從1到n間,1~9一共出現的次數

這道題直接暴力是不科學的,因為n有 1e9;

然後我就看到了乙個很好的從貢獻思考的方法;

——>**洛谷學神的方法:

樓下dalao都是數學方法和數字dp,看的本蒟蒻心慌慌

如果對高階方法難以理解的話,這裡提供一種簡單方法,雖然效率比dalao們差很多,但是對於本題已經夠了

對於每乙個數x,可以分為x/10000和x%10000兩個部分(也就是前幾位和後4位)

那麼對於中間很大一段數字,同樣的前幾位會重複出現一萬次,後4位就是0000-9999

所以對於中間這一段,可以列舉前幾位,貢獻值乘以1萬,然後每列舉乙個,0-9的出現次數加上4000就是後4位的貢獻值

(0000-9999總共4萬個數碼,每個數碼出現次數都相等)

然後前面的1-9999和最後一截 前幾位沒出現1萬次的數暴力算就行了

這份**絕對容易理解,而且對於這題也是0ms(自己理解了比較久。。。

#include #include 

#include

#include

#include

const

int n = 10000

;using

namespace

std;

int n,a[11],b[11

];void f(int x) //

計算乙個數中每個數碼出現次數

intmain()

else

for(int i=0; i<10; i++)a[i]+=4000*(x-1);//

後4位的貢獻值一次性加上,不用乙個乙個加

for(int i=x*n; i<=n; i++)f(i); //

算最後的一些數

}

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

printf(

"%d\n

",a[i]); //

輸出return0;

}

洛谷 P1239 計數器

一本書的頁數為n,頁碼從1開始編起,請你求出全部頁碼中,用了多少個0,1,2,9。其中 個頁碼不含多餘的0,如n 1234時第5頁不是0005,只是5。輸入格式 乙個正整數n n 10 9 表示總的頁碼。輸出格式 共十行 第k行為數字k 1的個數。輸入樣例 1 複製 11輸出樣例 1 複製 141 ...

計數器 智慧型計數器簡介

計數器主要是應用於電子科技領域,計數器是一種運用得比較多的時序邏輯電路。計數器可以對數字進行運算,它是一種沒有辦法顯示計算結果的顯示器。隨著電子科技的不斷發展,現在的計數器也實現了智慧型功能。智慧型計數器的出現幫助我們實現了很多高強度生產問題 複雜的技術問題,並且節約了生產成本和人力成本。智慧型計數...

計數器設計

最近看到一篇文章說要實現乙個計數器的功能,於是通過思索,設計了乙個靈活可用性高的物件計數器。裡面閃爍著 很多的火花。template class object counter object counter private static int m count template int object ...