ACM ICPC 2011-2012 Northeastern European Regional Contest(NEERC)B Binary Encoding

B:

  现在有一种新的2进制表示法,要你求出0~m-1的每个数的表示。

  规则如下:n 是满足 m<=2n 最小数。

       而0~m-1的数只能够用n-1个位和n个位来表示。

       对于n个位表示的数来说不能有n-1个位表示的数前缀。(如果3表示101那么就不能有10去表示前面的数。

       要求要全部数的位数加起来最小, 数从小到大排。

  题解:我们先要求出n。

    如果是m == 2n 来说。我们不会有n-1位来表示数。

    证明:我们有 m/2 个 n-1位数,每一个n-1位数在尾部加上0或者1就可以变成n位的数,

       1个n-1位数可以变成2个,所以m/2个变成m个n位数。所以就没有n-1位的数。

    如果m < 2n 。同样的我们还是有 2n-1 个n-1位的数,因为一个n-1位的数可以变成2个n位的数,我们从后往前把一个n-1位的数变成2个(从后往前满足从小到大),直到凑齐m个数。

  

View Code

 

posted @ 2017-08-26 20:41  Dh_q  阅读(189)  评论(0编辑  收藏  举报