【BZOJ 1192】[HNOI2006]鬼谷子的钱袋
2018-03-18 19:30
246 查看
【链接】 我是链接,点我呀:)
【题意】
在这里输入题意
【题解】
设k为最大的正整数满足
\(2^0+2^1+...+2^k<=m\)
如果\(m>2^0+2^1+...+2^k\)
那么只用\(2^0,2^1,...2^k\)和\(m-(2^0+2^1+...+2^k)\)这k+2个数就能表示出0..m这m+1个数字了。
(原理自己想
(不过我还不是很明白那个\(m-(2^0+2^1+...+2^k)\)是否会和前面的2次方数字重复
(不过因为AC了,所以肯定是不会重复了。那么就记住这个结论吧。
如果m=...
那么只用\(2^0,2^1,...2^k\)这k+1个数字就能表示0..m这m+1个数字了。
【代码】
#include <bits/stdc++.h> #define LL long long #define rep1(i,a,b) for (int i = a;i <= b;i++) #define rep2(i,a,b) for (int i = a;i >= b;i--) #define all(x) x.begin(),x.end() #define pb push_back #define lson l,mid,rt<<1 #define rson mid+1,r,rt<<1|1 using namespace std; const double pi = acos(-1); const int dx[4] = {0,0,1,-1}; const int dy[4] = {1,-1,0,0}; int m; int main(){ #ifdef LOCAL_DEFINE freopen("rush_in.txt", "r", stdin); #endif scanf("%d",&m); int now = 1; int cnt = 0; while (now<=m){ cnt++; m-=now; now*=2; } if (m) cnt++; printf("%d\n",cnt); return 0; }
相关文章推荐
- BZOJ 1192: [HNOI2006]鬼谷子的钱袋 数学结论
- BZOJ 1192 [HNOI2006]鬼谷子的钱袋(玄学)
- bzoj1192 [HNOI2006]鬼谷子的钱袋
- BZOJ 1192: [HNOI2006]鬼谷子的钱袋(新生必做的水题)
- bzoj1192 [HNOI2006]鬼谷子的钱袋
- BZOJ 1192 [HNOI2006] 鬼谷子的钱袋 题解
- [BZOJ]1192: [HNOI2006]鬼谷子的钱袋
- bzoj-1192 [HNOI2006]鬼谷子的钱袋(水题)
- bzoj1192 [HNOI2006]鬼谷子的钱袋
- 【bzoj1192】 HNOI2006鬼谷子的钱袋 水题
- [BZOJ1192] [HNOI2006]鬼谷子的钱袋
- BZOJ 1192 [HNOI2006]鬼谷子的钱袋
- bzoj 1192: [HNOI2006]鬼谷子的钱袋
- bzoj1192: [HNOI2006]鬼谷子的钱袋
- BZOJ 1192: [HNOI2006]鬼谷子的钱袋
- bzoj 1192: [HNOI2006]鬼谷子的钱袋
- bzoj 1192: [HNOI2006]鬼谷子的钱袋
- 【bzoj 1192】 [HNOI2006]鬼谷子的钱袋
- 【bzoj 1192/P2320】<两份不同> 鬼谷子的钱袋 HNOI2006(dfs or 裸求二进制位数)
- 【HNOI2006】【BZOJ1192】鬼谷子的钱袋