看题解都是进制转换,本弱弱一开始没想到,但是搞出了点规律,一样可以过。上图
规律就是第 2^n 个数字就是数字 k^n; 然后在第 2^n 到 2^n +1之间的数字,就是第 2^n 的数加上第一个数,第二个数,知道第2^n-1个数。然后我们只要把这个过程模拟出来就可以啦,代码也很短
#include<stdio.h>
#include<iostream>
#include<cmath>
using namespace std;
const long long max_ = 300000+7;
long long ans[max_];
int main() {
long long k, n;
cin >> k >> n;
ans[1] = 1; ans[2] = k;
int cishu = 1;
int now = 3;
for (int i = 1; i <= 50; i++) {
int t = pow(2, i);
ans[t] = pow(k, i);
int j = 1;
for (; now < pow(2, i+1); now++,j++) {
ans[now] = ans[t] + ans[j];
if (now >= n) {
cout << ans[n];
return 0;
}
}
now++;
}
return 0;
}