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; }