真假鑑定
時間限制: 1 sec 記憶體限制: 128 mb
題目描述
有n堆硬幣依次排列,每一堆有a_i個。每堆硬幣全是真幣或全是假幣,真幣每個重5克,假幣每個重4克。你有一台電子天平,可以從每堆硬幣中挑出若干個進行一次稱量(也可以乙個都不選)。現在你想要知道,若要確定前1,2,……,n堆硬幣的真假,至少要稱量幾次。
輸入第一行乙個整數n,表示硬幣的堆數。
接下來一行n個整數a_i,表示每堆硬幣的數量。
輸出n行,每行乙個整數,第i行表示想要確定前i堆硬幣的真假至少要稱量幾次。
樣例輸入 copy
32 3 4
樣例輸出 copy11
1提示
對於10%的資料,n≤1
對於30%的資料,n≤2
對於60%的資料,n≤100
對於80%的資料,n≤1000
對於100%的資料,n≤10 ^ 5,a_i≤10 ^ 9
存在10%的資料,a_i=1
請教大佬之後,終於搞懂了。
根據給出的提示,可以知道當拿出來的每個組的個數為 1 2 4 8 … 的時候就可以唯一確定,所以問題轉換成前 i 個數中1 2 4 8 … 這樣組合的最小組數。
思路就是列舉每乙個數,找到 <= 當數的最大的2的冪,讓這個位置的冪數加1,對當前位置及之前的數,依次列舉1-30(指的是2的冪的位置,比如說 2 ^ 0 的位數為1,2 ^ 3 的位數為4),每種分兩種情況討論:
(1) 當當前的2的冪的個數 > 當前位數與方案數的乘積,說明方案數不夠,需要新增方案,新增的方案為 多出來的個數 / 當前位數,當不能整除的時候,還需要多出來乙個方案存多餘的。
(2)反之則在當前方案後面加上即可。
對於 5 5 5 這種的,顯然 5 可以表示成1 2 4 ,往前補位就好了,也就是說每次列舉到的位數,比如當前位數為4,前面需要構成能1 2 4 8 這樣的數列,而且每乙個數字一定可以放得下,因為列舉的方式是遞增的。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define x first
#define y second
using
namespace std;
typedef
long
long ll;
typedef pair<
int,
int> pii;
const
int n=
100010
,mod=
1e9+
7,inf=
0x3f3f3f3f
;const
double eps=
1e-6
;int n;
int a[n]
,mp[n]
;ll fun[n]
;int
main()
}printf
("%d\n"
,ans);}
return0;
}
upc 潔淨無瑕(思維)
時間限制 1 sec 記憶體限制 128 mb 題目描述 小x是一位富豪,酷愛收藏寶石。在他的收藏櫃中,從左到右依次擺放著各種形態不一的鑽石。為了評價一顆鑽石的美觀程度,小x為每顆鑽石賦予了乙個潔淨度ai。小x認為,鑽石之間不能太衝突。他會從左到右依次看過去,若兩顆相鄰的鑽石,其中一顆的潔淨度為奇數...
球鞋真假難辨,毒APP鑑定幫你搞定
現如今,人們的生活水平提高了,更多的年輕人開始注重穿搭了,而這其中運動裝備,比如球鞋 球衣 椰子 帆布鞋,尤其是各種潮牌備受青睞,很多聯名成為了很多年輕人不斷追求的款式。甚至有人會為了一雙滿天星排上幾天幾夜的隊。但是我們都知道,不管什麼東西,只要需求的人多了之後,假貨程式設計客棧也會跟著層出不窮,而...
UPC 1790 模擬 潛伏者
時間限制 1 sec 記憶體限制 128 mb 提交 251 解決 58 提交 狀態 討論版 命題人 admin r 國和 s 國正陷入戰火之中,雙方都互派間諜,潛入對方內部,伺機行動。歷盡艱險後,潛伏於 s 國的 r 國間諜小 c 終於摸清了 s 用密碼的編碼規則 1.s 方內部欲傳送的原資訊經過...