題解 Test 買水的ACX(套路)

2022-04-30 06:33:07 字數 1401 閱讀 8166

題目描述:

acx在××

信競組學會資訊競賽,但是他的同學都很

巨,於是要他去買水,結果來到某個買水的商店(奇奇怪怪的商店)。

一天,acx

買了 n 

個容量可以認為是無限大的瓶子

,初始時每個瓶子裡有 

1 公升水。

acx發現瓶子實在太多了,

於是他決定 保留不超過 

k 個瓶子。每次他選擇兩個當前含水量相同的瓶子合併

,把乙個瓶子的水全部倒進另乙個瓶

,然後把空瓶丟棄

(不能丟棄有水的瓶子)。

顯然在某些情況下

acx無法達到目標,

比如 n=3,k=1.

此時acx

會重新買一些新的瓶子(

新瓶子容量無限

,開始時有 

1 公升水

),以達到目標。現

在acx

想知道,

最少需要買多少新瓶子才能達到目標呢

?讀入格式:

一行 兩個正整數 n,k(1<=n<=10^9 ,k<=1000)

輸出格式:

乙個非負整數,

表示最少需要買多少新瓶子。

樣例輸入:

3 1樣例輸出:

1solution:

將瓶子中水的體積轉換成二進位制,如1公升可寫成0000001,同理兩公升就是0000010。

題目合併的一定是相同的體積合併,所以容積一定是二的次方倍,這時候我們可以發現,二進位制數上的1就可以是乙個瓶子,這時候我們就可以將題目轉換成加數(數就是多加了幾瓶水),如樣例:11 加一變成 100 就只有乙個瓶子了。

所以題目就可以變成每次加x,使這個數二進位制時位上的1的個數小於k

為了方便我們每次就加上最後一位上表示的二進位制數如10010(2)時,就加10(2),使最後位置上的1進製從而減少1的個數。

這個題目需要感性理解下吧,理解**了還是不難的。就是一道套路題~

code:

1

//it is coded by ning_mew on 11.1 :)

2 #include3 #include4 #include5 #include6 #include7 #include8

using

namespace

std;

9int

n,k;

10int need=0;11

int a[10000+10

];12

int num(int

s)15

return

numb;16}

17int

main()

25 printf("

%d\n

",need);

26return0;

27 }

P1909 買鉛筆 的題解

p老師需要去商店買n支鉛筆作為小朋友們參加noip的禮物。她發現商店一共有 33種包裝的鉛筆,不同包裝內的鉛筆數量有可能不同,也有可能不同。為了公平起 見,p老師決定只買同一種包裝的鉛筆。商店不允許將鉛筆的包裝拆開,因此p老師可能需要購買超過nn支鉛筆才夠給小朋 友們發禮物。現在p老師想知道,在商店...

SCOI2014極水的題解

話說scoi都考了1個月了,終於拿出決心把題解補完了,但都說了是極水的題解,大家就看著玩吧 day1 t1 目標是找最長不降子串行,先就有乙個比較顯然的結論,就是假如我們要拔高區間 l,r 將其換為 l,n 肯定不會讓答案變差 yy一下就發現這點很顯然 就可以得到乙個dp的大體思路了。就是dp i ...

雙11不動腦不傷錢躺著買的N個套路

今天是 11 月 9 日,距離雙 11 只剩下 48 小時不到了。滿減券 預付金 淘氣值 沒點奧數基礎,還真難在電商叢林中殺出一條血路。也因此,眾不由得感慨,每年的程式設計客棧雙11,都是一場對數學 閱讀理解的終極考驗。知道大家已經撓破頭皮,現在阿信君強勢安利大家一些不那麼燒腦的雙 11 信用卡購物...