bzoj1992鬼谷子的錢袋 二分亂搞 二進位制

2022-04-06 04:55:41 字數 1373 閱讀 8938

time limit: 10 sec  memory limit: 162 mb

submit: 3223  solved: 2333

鬼谷子非常聰明,正因為這樣,他非常繁忙,經常有各諸侯車的特派員前來向他諮詢時政。有一天,他在咸陽遊歷的時候,朋友告訴他在咸陽最大的拍賣行(聚寶商行)將要舉行一場拍賣會,其中有一件寶物引起了他極大的興趣,那就是無字天書。但是,他的行程安排得很滿,他他已經買好了去邯鄲的長途馬車標,不巧的是出發時間是在拍賣會快要結束的時候。於是,他決定事先做好準備,將自己的金幣數好並用乙個個的小錢袋裝好,以便在他現有金幣的支付能力下,任何數目的金幣他都能用這些封閉好的小錢的組合來付賬。鬼谷子也是乙個非常節儉的人,他想方設法使自己在滿足上述要求的前提下,所用的錢袋數最少,並且不有兩個錢袋裝有相同的大於1的金幣數。假設他有m個金幣,你能猜到他會用多少個錢袋,並且每個錢袋裝多少個金幣嗎?

包含乙個整數,表示鬼谷子現有的總的金幣數目m。其中,1≤m ≤1000000000。

只有乙個整數h,表示所用錢袋個數

3

2

/*

據說這是最正確的解法,二進位制所有的錢袋都可以看成乙個取或不取的情況。

那麼這些錢袋取或不取就可以看作0或1,也就是說,要使用一些數字表示乙個範圍裡的所有數

同時這又很二進位制(取或不取)。

所以我們就把錢袋裡錢的數量定為2^n個。話說這種思路我怎麼不明白原理額。。。。

*/#include

intmain()

/*所以還是這種亂搞的方法好啊,簡潔通俗易懂還能通過!

其實這題並沒有想象中地那麼複雜

我們可以假象一下 若m=12 則需要求得組合方案有(1 2 3 4 ……12)

我們可以把他們分成兩份 (1 2 …… 6) (7 8 ……12)稱左邊的為l 右邊的為r

很容易得知r中的每種方案都可以由(12/2)+左邊的組合得出

再次分成兩份(1 2 3)(4 5 6)

同理 當m為奇數時 顯而易見地 只需把 (m/2)改為(m/2+1) 即可

*/#include

#include

using

namespace

std;

long

long

n,m,ans,tot;

int a[1000001];//

陣列記錄每個錢袋裝的錢數,隨時準備輸出!哈哈

intmain()

printf(

"%d\n

",tot+1

);

return0;

}

心若向陽,無言悲傷

鬼谷子的錢袋

題目描述 鬼谷子非常聰明,正因為這樣,他非常繁忙,經常有各諸侯車的特派員前來向他諮詢時政。有一天,他在咸陽遊歷的時候,朋友告訴他在咸陽最大的拍賣行 聚寶商行 將要舉行一場拍賣會,其中有一件寶物引起了他極大的興趣,那就是無字天書。但是,他的行程安排得很滿,他已經買好了去邯鄲的長途馬車票,不巧的是出發時...

BZOJ 1192 鬼谷子的錢袋

鬼谷子非常聰明,正因為這樣,他非常繁忙,經常有各諸侯車的特派員前來向他諮詢時政。有一天,他在咸陽遊歷的時候,朋友告訴他在咸陽最大的拍賣行 聚寶商行 將要舉行一場拍賣會,其中有一件寶物引起了他極大的興趣,那就是無字天書。但是,他的行程安排得很滿,他他已經買好了去邯鄲的長途馬車標,不巧的是出發時間是在拍...

Bzoj1192 鬼谷子的錢袋

time limit 10 sec memory limit 162 mb submit 3312 solved 2412 submit status discuss 鬼谷子非常聰明,正因為這樣,他非常繁忙,經常有各諸侯車的特派員前來向他諮詢時政。有一天,他在咸陽遊歷的時候,朋友告訴他在咸陽最大的拍...