题目链接:10479 - The Hendrie Sequence
题目大意:有一个序列,由0开始变换,0->1,非0数k变成0,0,0...(k-1个0),k+1。现在给出n,问第n个元素是什么。
解题思路:看别人找的规律,将串分成长度为1,1,2,4,8.....会发现s = 1个s-2,2个s-3,3个s-4....
n要用unsign long long。
#include <stdio.h>
#include <string.h>
typedef unsigned long long ll;
const ll tmp = 1;
ll n;
int dfs(ll m, int d) {
int c = 1;
for (int i = d - 2; i >= 0; i--) {
ll k = i ? tmp << (i-1) : tmp;
for (int j = 0; j < c; j++) {
if (k < m) m -= k;
else return dfs(m, i);
}
c++;
}
return d;
}
int solve() {
if (n == 1) return 0;
n--;
for (int i = 1; ; i++) {
ll k = tmp << (i-1);
if (k < n) n -= k;
else return dfs(n, i);
}
}
int main() {
while (scanf("%llu", &n) == 1 && n) {
printf("%d\n", solve());
}
return 0;
}