杂题

题意

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

做法

二分操作次数

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

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

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

原文地址:https://www.cnblogs.com/Grice/p/12885183.html