題目 洛谷1582 倒水(二進位制 運算子)

2021-09-10 15:27:53 字數 835 閱讀 5777

題目描述:

一天,cc買了n個容量可以認為是無限大的瓶子,開始時每個瓶子裡有1公升水。接著~~cc發現瓶子實在太多了,於是他決定保留不超過k個瓶子。每次他選擇兩個當前含水量相同的瓶子,把乙個瓶子的水全部倒進另乙個裡,然後把空瓶丟棄。(不能丟棄有水的瓶子)

顯然在某些情況下cc無法達到目標,比如n=3,k=1。此時cc會重新買一些新的瓶子(新瓶子容量無限,開始時有1公升水),以到達目標。

現在cc想知道,最少需要買多少新瓶子才能達到目標呢?

輸入輸出格式:

輸入格式:

一行兩個正整數, n,k(1≤n≤2×10^9 ,k≤1000)。

輸出格式:

乙個非負整數,表示最少需要買多少新瓶子。

思路:

2的n次方個瓶子可以合併成乙個瓶子,把n個瓶子轉化成二進位制來表示比如13變成1101,2的3次方+2的2次方+2的0次方,共可以合併成3個瓶子,也就是13的二進位制中1的個數。

我們可以每次求出二進位制中1的個數,如果小於等於k就完成了,否則從低位開始,找到第乙個1,用乙個數和這個1合併,並進製,消除低位的1,完成一次後再重複上述操作。

這裡需要注意的是求二進位制1的個數和&運算子的應用。

**:

#include

using namespace std;

intmain()

printf

("%lld\n"

,ans)

;}

洛谷P1582 倒水 二進位制

一天,cc買了n個容量可以認為是無限大的瓶子,開始時每個瓶子裡有1公升水。接著 cc發現瓶子實在太多了,於是他決定保留不超過k個瓶子。每次他選擇兩個當前含水量相同的瓶子,把乙個瓶子的水全部倒進另乙個裡,然後把空瓶丟棄。不能丟棄有水的瓶子 顯然在某些情況下cc無法達到目標,比如n 3,k 1。此時cc...

P1582 倒水(二進位制)

p1582 倒水 評測方式 雲端評測 標籤難度 普及 提高 時空限制 1000ms 128mb 最新討論 推薦的相關題目 題目描述 一天,cc買了n個容量可以認為是無限大的瓶子,開始時每個瓶子裡有1公升水。接著 cc發現瓶子實在太多了,於是他決定保留不超過k個瓶子。每次他選擇兩個當前含水量相同的瓶子...

P1582 倒水 二進位制

一天,cc買了n個容量可以認為是無限大的瓶子,開始時每個瓶子裡有1公升水。接著 cc發現瓶子實在太多了,於是他決定保留不超過k個瓶子。每次他選擇兩個當前含水量相同的瓶子,把乙個瓶子的水全部倒進另乙個裡,然後把空瓶丟棄。不能丟棄有水的瓶子 顯然在某些情況下cc無法達到目標,比如n 3,k 1。此時cc...