3,881
社区成员
发帖
与我相关
我的任务
分享
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e6+100;
struct node
{
int x[N];
int len;
};
int k,n;
ll ksm(int a,int b)
{
if(!b) return 1;
ll temp=ksm(a,b/2);
if(b%2) return temp*temp*a;
return temp*temp;
}
ll get_num(int a[],int len)
{
ll sum=0;
for(int i=1;i<=len;i++)
sum+=ksm(k,a[i]);//,printf("%d ",a[i]);
//printf("\n%lld\n",sum);
return sum;
}
void bfs()
{
//printf("1\n");
priority_queue<int> res;
queue<node> q;
node t;
t.len=1,t.x[1]=0;
q.push(t);
//printf("%d \n",q.empty());
while(!q.empty())
{
node now=q.front();
q.pop();
// printf("%d \n",now.len);
ll w=get_num(now.x,now.len);
res.push(w);
if(res.size()==n)
{
printf("%lld\n",res.top());
break;
}
for(int i=now.x[now.len]+1;i<=50;i++)
{
node d;
d.len=now.len+1;
d.x[d.len]=i;
q.push(d);
}
}
return ;
}
int main()
{
scanf("%d%d",&k,&n);
// printf("%d %d \n",k,n);
bfs();
return 0;
}