51nod1042 0 x出現次數 分治

2022-02-20 01:47:08 字數 1429 閱讀 6331

題意:中文題誒~

思路:這道題和前面的51nod1009好像,直接套用那個演算法也是能ac的,不過我還是喜歡換個口味;

求a, b之間個數字出現的次數。可以由分治的思想,先求出他們在0~b出現的次數, 再求出在0~a-1出現的次數,前者減去後者即為答案;

然而如何求出0~x各個數字出現的次數我是看了一本書上的方法才會的,這裡直接給出**好了,隨便帶入一組資料也不難驗證其正確性,所以也就不多說啦。。。

**:

1 #include 2

#define ll long long

3#define maxn 10

4using

namespace

std;

56 ll value=1; //

***value記錄當前的權值

7 ll vis[maxn]; //

***vis[i]儲存0到x中i出現的次數89

void

deal(ll n)

13 ll one=n%10; //

***one, ten分別表示當前n的個位和高位

14 n/=10

;15 ll ten=n;

16for(int i=0; i<=one; i++)

19while

(ten)

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

26 vis[0]-=value; //

***將第一位是0的情況排除

27 value*=10

;28 deal(n-1

);29}30

31int main(void)37

deal(b);

38 value=-1

;39 deal(a-1

);40

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

43return0;

44 }

還是寫一下套用1009ac的**好了~

**:

1 #include 2

#define ll long long

3using

namespace

std;45

ll deal(ll n, ll key)

11 ll gg=n%10

;12 ll num=x/(cnt*10

);13

if(ggif(gg==key)else

20 cnt*=10

;21 n/=10;22

}23return

ans;24}

2526

int main(void)32

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

35return0;

36 }

51nod1042 0到9的數量(數字dp)

這道題當時困擾了我很長時間,當時我做1的數量的時候是從前往後寫的,等寫這道題的時候從前往後用了3天還是沒做對,情況太多太複雜 主要也是因為我比較菜 下面附上 include include include using namespace std long long dp 20 long long p...

整數中X出現的次數 C

題目 對於給定的n,求出1 n範圍內x出現的次數。0 x 9 思路 這道題nlogn的演算法很容易想到。遍歷1 n的每個數,判斷每個數的每一位是否為1,計數即可。下面直接給出 include using namespace std int numberof1between1andn int n,in...

1 n 之間 數字x出現的次數

宣告 僅個人小記 輸入 n 整數,0 x 9 輸出 1 n 中 數字x出現的次數 include include using namespace std int main void endtime clock cout cnt endl cout time elpased double endtim...