bzoj1192

  • 可能有点水, 但这种题做的很少, 还是练习一下比较好
  • 考虑二进制
  • 任何数都可用2的幂次方加和得到.
  • 那么把m个金币拆成几个2的幂次方的数就可以凑出任何 1~m 之间的数了. 但是不一定会正好, 把剩下的钱拆成单独一份, 答案就是第一个大于m的2^n的那个n. 那如果正好拆完呢? 因为最后一份不可以是m, 所以还是要把m拆开, 结果还是一样.
  • 为什么是二进制不是其他进制呢? 因为任何数都可用2的幂次方加和得到. 但其他的就不一定了
  • -------ghy1953
    #include <stdio.h>
    #include <algorithm>
    #include <cstring>
    #include <cmath>
    #include <queue>
    #include <vector>
    using namespace std;
    int n;
    int main()
    {
      scanf("%d",&n);
      for(int i=0;;i++)
      {
          if(1<<i>n)
          {
            printf("%d\n",i);
            break;
          }
      }
      return 0;
    }
    View Code

     

posted @ 2017-10-26 00:41  新手-周  阅读(133)  评论(0编辑  收藏  举报