讨论 / c++ac
zyzqd 2019-04-05 01:49:59
点我顶贴 收藏 删除
#include<set>

#include<map>

#include<list>

#include<queue>

#include<stack>

#include<string>

#include<math.h>

#include<time.h>

#include<vector>

#include<bitset>

#include<memory>

#include<utility>

#include<stdio.h>

#include<sstream>

#include<iostream>

#include<stdlib.h>

#include<string.h>

#include<algorithm> //一大堆头文件

#define LL unsigned long long

using namespace std;

long long a[10];//1024是2^10,1000<1024,所以0~9够了

long long f[1010];//long long 防炸

int main()

{

long long k,n;

cin>>k>>n;

int i,j;

a[0]=1;//求出k^0~k^9

int s=1;

for (i=1;i<=9;i++)

a[i]=a[i-1]*k;//这样推比用pow要快些吧。

for (i=0;i<=9;i++)//分成九段去枚举 a[i]表示第i段的开头的值

{

f[s]=a[i];//找规律可得第i组的第一个是k^i

for (j=1;j<=s;j++)

f[s+j]=f[s]+f[j];//开始找规律得到的,f[i]=f[这一段的第一个的位置]+f[i-这一段的第一个的位置]

s*=2;// s表示2^i 相当于pow(2,i);

if (f[n]!=0)//如果f[n]求出来了

{

printf("%d",f[n]); //用%d才能a,不然就要打标

return 0;//节约时间

}

}

return 0;

}

#1 pynyousa@2021-05-08 19:14:18
回复 删除
这是C?
查看更多回复
提交回复