洛谷p1062 找规律

看题解都是进制转换,本弱弱一开始没想到,但是搞出了点规律,一样可以过。上图
在这里插入图片描述
规律就是第 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;
}
发布了32 篇原创文章 · 获赞 3 · 访问量 673

猜你喜欢

转载自blog.csdn.net/qq_43804974/article/details/101079071