杂题

题意

给你一堆石子,\(n\)个。给定\(m\),每次操作如下:
若当前有\(k\)堆石子,每堆\(a_i\)个,给每堆指定\(b_i\)\(.s.t\sum b_i\le m\),然后把每堆分为两堆\(b_i,a_i-b_i\)
求最少操作次数使得最后\(n\)堆石子,每堆一个
\(T\le 1000,m\le n\le 10^9\)

做法

二分操作次数

现在就相当于一个\(n\times mid\)的方格,初始全\(0\),每列填不超过\(m\)\(1\),使得任意行最后的状态不一样

\(1\)等价于分配到\(b_i\)

现在考虑每次给一些行填\(1\),枚举\(i=1,...,mid\),给一些行填\(i\)个,\(i\)产生的不同行个数就是\({mid\choose i}\)
但同时还需要保证\(\sum b_i\le m\),我们发现这样填完后每列被填的个数均为\({mid-1\choose i}\)

posted @ 2020-05-13 21:58  Grice  阅读(82)  评论(0编辑  收藏  举报