2017廣東工業大學程式設計競賽決賽 E(倒水)

2021-07-29 17:04:40 字數 1022 閱讀 8424

problem e: 倒水(water)

description

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

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

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

input

第一行乙個整數t,表示有t組資料。

接著t行,每行兩個正整數, n,k(1<=n<=10^9,k<=1000)。

output

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

sample input

3 3 1

13 2

1000000 5

sample output

1 3

15808

hint

**因為是兩個相等容量的水的才能合併在一起,故要轉化為2進製來思考,(但這台隱晦了吧,好難想到的,,還是我太弱了啊。。。)

最後的數可以拆分在k個2的冪的數相加即可。故只要讓瓶子個數n轉化為二進位制後1的個數小於k即可(為什麼小於k就可以呢,因為乙個二的冪的數可以拆分成兩個冪的數啊。。),怎麼去找這個n呢,就是在最小的1的位數上相加。詳情如下****

#include

#include

#include

int getbin(int n)

return k;

}int main(void)

n += i;//n加上這些瓶子

sum += i;

}printf("%lld\n",sum);

}return

0;}

看了看重現賽的榜單,他們都好厲害啊,一搏大佬竟然把b題都搞過去了,我好弱啊。。。啊啊啊啊,要瘋了。。。。哎。。。

廣東工業大學程式設計競賽決賽 C

小時候,我只能一階一階得爬樓梯,後來,我除了能一次爬一階,還可以一次爬兩階,到現在,我最多一次可以爬三階。那麼現在問題來了,我想爬上 n層樓,相鄰樓層之間有一段樓梯,雖然我一次可以爬 1個台階 2個台階和 3個台階,但是我在i與 i 1層之間的樓梯上時,我不能跨越到 i 1與 i 2層之間的樓梯。現...

2017廣東工業大學程式設計競賽決賽 等凹數字

定義一種數字稱為等凹數字,即從高位到地位,每一位的數字先非遞增再非遞減,不能全部數字一樣,且該數是乙個回文數,即從左讀到右與從右讀到左是一樣的,僅形成乙個等凹峰,如 543212345 5544334455 是合法的等凹數字,543212346 123321,111111 不是等凹數字。現在問你 l...

河南工業大學2017「玲瓏杯」程式設計競賽 04

時間限制 1 秒 記憶體限制 128 mb 提交 186 解決 101 提交 狀態 題目描述 rqy在和妹子約會,突然女票打來 rqy騙女票他在寫 女票為了證實,問他鍵盤上f鍵左邊是哪個鍵。你能否幫助rqy回應女票的質問?不然他可就要寫思想匯報了.輸入 輸入資料第一行是乙個整數 t 1 t 1000...