习题 10-23 UVA - 10479 The Hendrie Sequence
2016-03-22 22:57
423 查看
大体题意:
H (1) = 0;
然后把每一个数字X都改成X个0加上X+1的形式,问最后第n个值是多少!(注意可以不是个位数!)
思路:
看了好久,还是从题解发现的规律。
规律:
第2 ^ K 一定是K,然后这个K前面有K - 1个0,K-2个1,K-3个02.。。。。。依次类推 直到K - n = 1。
这样写出长度足够长的Hn来之后可以发现,每一个数字前面的规律都符合上述规律。
所以递归就好了!
先找到第一个K 满足 2^K 刚好满足 2^ K大于n,那么len = 2^k-n, 如果len = 0,则返回n,否则不断的减掉k-1个0,k-2个1.。。。
最后不断递归不能再减的那个数字即可!
H (1) = 0;
然后把每一个数字X都改成X个0加上X+1的形式,问最后第n个值是多少!(注意可以不是个位数!)
思路:
看了好久,还是从题解发现的规律。
规律:
第2 ^ K 一定是K,然后这个K前面有K - 1个0,K-2个1,K-3个02.。。。。。依次类推 直到K - n = 1。
这样写出长度足够长的Hn来之后可以发现,每一个数字前面的规律都符合上述规律。
所以递归就好了!
先找到第一个K 满足 2^K 刚好满足 2^ K大于n,那么len = 2^k-n, 如果len = 0,则返回n,否则不断的减掉k-1个0,k-2个1.。。。
最后不断递归不能再减的那个数字即可!
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int maxn = 65; typedef unsigned long long llu; llu p[maxn],lent[maxn]; void init(){ p[1] = 2; lent[0] = lent[1] = 1; for (int i = 2; i < maxn; ++i){ p[i] = p[i-1]*2; lent[i] = lent[i-1]*2; } } llu dfs (llu len,llu n){ if (len == 0)return n; llu cnt=0; for (int i = n-1 ; i >= 1; --i){ if (len > i*lent[cnt]){ len -= i*lent[cnt]; ++cnt; } else { for (int j = 0;;++j){ if (len > lent[cnt])len -= lent[cnt]; else break; } if (cnt == 1 || cnt == 0)return cnt; return dfs(len-1,cnt); } } } int main(){ llu n; init(); while(scanf("%llu",&n) == 1 && n){ if (n == 1){ printf("0\n"); continue; } for (int i = 1; i < maxn; ++i){ //printf("%llu\n",lent[i]); if (p[i] >= n){ //printf("%llu\n",p[i]); printf("%llu\n",dfs(p[i]-n,i)); break; } } } return 0; }
相关文章推荐
- Android——UI和View——控制方式
- windows下安装requests
- js获取checkbox被选中的value值
- leetcode62.[DP] Unique Paths
- Day4.2--Android高级UI控件之AutoCompleteTextView的使用
- 解决 Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required
- iOS中UItableView 的重用机制原理
- poj Number Sequence 1019 (打表 &模拟)
- NGUI之UISprite
- 算法 加权quick-union
- codeforces_612C.Replace To Make Regular Bracket Sequence(stack)
- iOS开发-UUID
- leetcode303.[DP] Range Sum Query - Immutable
- Ngui使用粒子
- poj 2778:DNA Sequence
- ExtJs之Ext.query
- StringBuffer与StringBuilder详解
- haskell 安装gtk 适合win7GUI编程
- StringBuffer与StringBuilder详解
- 学习 ui-router - 管理状态