洛谷P1582 倒水

2021-08-19 18:16:00 字數 1073 閱讀 1828

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

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

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

輸入格式:

一行兩個正整數, n,k( 1\le n\le 2\times 10^9,k\le 10001≤

n≤2×

109,

k≤10

00)。輸出格式:

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

輸入樣例#1:

複製

3 1

輸出樣例#1:

複製

1

輸入樣例#2:

複製

13 2

輸出樣例#2:

複製

3

輸入樣例#3:

複製

1000000 5

輸出樣例#3:

複製

15808

位運算:

參考:  講的很詳細

i&-i

這個式子返回的值就是從後往前數,到第乙個1出現為止的數(二進位制下)。

來列個表:

ii(2)

i&-i

i&-i(2)11

11210

210311

114100

4100

510111

6110210

711111

81000

81000

#includeusing namespace std;

int get(int n)

return num;

}int n, k , ans;

int main()

cout << ans;

return 0;

}

洛谷P1582 倒水

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

洛谷P1582 倒水

題目描述 這道題經歷了 70 80 90 100的坎坷路程 易得2的次方個瓶子可以倒在一起,所以只需要每一次找出n中最大的2的次方的數,將n減去這個數,k 直到k 1 然後找出比k大的最小2的次方數,用這個數減去k就是答案。然而我只得了70分,後來我想是不是2的31次方是不是不能用int,果然改了l...

洛谷P1582 倒水

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