一天,cc買了n個容量可以認為是無限大的瓶子,開始時每個瓶子裡有1公升水。接著~~cc發現瓶子實在太多了,於是他決定保留不超過k個瓶子。每次他選擇兩個當前含水量相同的瓶子,把乙個瓶子的水全部倒進另乙個裡,然後把空瓶丟棄。(不能丟棄有水的瓶子)
顯然在某些情況下cc無法達到目標,比如n=3,k=1。此時cc會重新買一些新的瓶子(新瓶子容量無限,開始時有1公升水),以到達目標。
現在cc想知道,最少需要買多少新瓶子才能達到目標呢?
一行兩個正整數, n,k(1≤n
≤2×1
09,k
≤1000
1\le n\le 2\times 10^9,k\le 1000
1≤n≤2×
109,
k≤10
00)。乙個非負整數,表示最少需要買多少新瓶子。
輸入 #1
3 1輸出 #1
輸入 #2
13 2
輸出 #2
輸入 #3
1000000 5
輸出 #3
這就是這個題和進製之間的關係:(具體思路看**注釋!)
合併前二進位制
合併後1個瓶子
11個瓶子
2個瓶子
101個瓶子
3個瓶子
112個瓶子
4個瓶子
1001個瓶子
5個瓶子
1012個瓶子
6個瓶子
1102個瓶子
7個瓶子
1113個瓶子
8個瓶子
1000
1個瓶子……
…
#include
using
namespace std;
intjudge
(int p)
//計算二進位制中1的個數
return num;
}int
main()
cout << ans;
return0;
}
P1582 倒水(數論??暴力!!)
這個題我很無語,一開始看綠題,還是數論,應該不會特別簡單,應該要動筆寫上好一會,過了一會旁邊 祝神說這原來是個藍題,我頓時覺得十分迷茫。結果看了這個題看了一會,仔細一想,woc,這題怕不是可以暴力出解,況且這個範圍確實也夠了啊,妥妥0ms出解。就試著打了一下。然後t兩個點。過了一會,發現2在進行乘的...
P1582 倒水(思維)
思路 首先如果乙個數等於2的n次方,那麼合併後一定是1個瓶子。而2的n次方中1的個數也是1個,13的二進位制1 1 0 1,二進位制1的個數3個,剛好13合併後是3個瓶子。我們可以得到乙個數二進位制1的個數就是這個數合併後的瓶子個數。我們在學樹狀陣列時有乙個lowbit函式 x x 就是取最後一位1...
P1582 倒水 題解
來水一發水題。題目鏈結。正解開始 首先,我們根據題意,可以得知這是乙個有關二進位制的題目 具體什麼關係,怎麼做,我們來具體分析 對於每個n,我們嘗試將其二進位制分解,也就是100101之類的形式 根據瓶子合併的特性,我們可以判定最後每乙個瓶子內的水都可以表示成2 i的形式 感性理解 對於每乙個數字上...