uva 10479——The Hendrie Sequence

来源:互联网 发布:任意矩阵的零次幂 编辑:程序博客网 时间:2024/04/29 08:05

题意:开始一个数0,然后0变成1,后边的变换规则是如果当前是k就在后边加上k-1个0,然后再加上k-1,该问题求该序列的第n个数是多少。


思路:规律的题目。将串分成1,1,2,4,8,然后会发现s=1个s-2,2个s-3,3个s-4……然后n要用unsigned long long 。


code:

#include <bits/stdc++.h>using namespace std;typedef unsigned long long ull;int dfs(ull n,int p){    int q=1;ull k;    for (int i=p-2;i>=0;i--){        if (i) k=1ll<<(i-1);        else k=1;        for (int j=0;j<q;j++){            if (k<n) n-=k;            else return dfs(n,i);        }        q++;    }    return p;}int sol(ull n){    if (n==1) return 0;n--;    for (int i=0;;i++){        ull t=1ll<<i;        if (t<n) n-=t;        else return dfs(n,i+1);    }}int main(){    ull n;    while (cin>>n&&n){       cout<<sol(n)<<endl;    }}


0 0
原创粉丝点击