华师一附中OI组

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1000|回复: 1
打印 上一主题 下一主题

P1062 数列

[复制链接]

738

主题

1485

帖子

5420

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5420
跳转到指定楼层
楼主
发表于 2018-7-4 23:44:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
https://www.luogu.org/problemnew/show/P1062

题目描述
给定一个正整数 k(3≤k≤15) ,把所有k的方幂及所有有限个互不相等的k的方幂之和构成一个递增的序列,例如,当 k=3时,这个序列是:
1,3,4,9,10,12,13,…(该序列实际上就是: 3^0,3^1,3^0+3^1,3^2,3^0+3^2,3^1+3^2,3^0+3^1+3^2,)

请你求出这个序列的第 N 项的值。

例如,对于 k=3 , N=100 ,正确答案应该是 981 。

输入输出格式
输入格式:
2 个正整数,用一个空格隔开:

k N ( k 、 N 的含义与上述的问题描述一致,且 3≤k≤15,10≤N≤1000 )。

输出格式:
1 个正整数。(整数前不要有空格和其他符号)。

输入输出样例
输入样例#1:
  3 100
输出样例#1:
981
说明
NOIP 2006 普及组 第四题
回复

使用道具 举报

50

主题

215

帖子

619

积分

高级会员

Rank: 4

积分
619
沙发
发表于 2018-10-2 15:47:07 | 只看该作者
  1. #include<iostream>
  2. #define FOR(i,a,b) for(int i=a;i<=b;i++)
  3. using namespace std;
  4. const int N=1<<11;
  5. long long int n,k,ans,cnt;
  6. bool num[N];
  7. long long int ksm(long long int x,long long int y)
  8. {
  9.     long long int xx=x;x=1;
  10.     while(y)
  11.     {
  12.         if(y%2)x*=xx;
  13.         xx*=xx;
  14.         y>>=1;
  15.     }
  16.     return x;
  17. }
  18. int main()
  19. {
  20.     cin>>k>>n;
  21.     while(n)
  22.     {
  23.         num[++cnt]=n%2;
  24.         n/=2;
  25.     }
  26.     FOR(i,1,cnt)ans+=num[i]*ksm(k,i-1);
  27.     cout<<ans<<endl;
  28.     return 0;
  29. }
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|服务支持:DZ动力|华师一附中OI组  

GMT+8, 2024-11-2 04:31 , Processed in 0.103540 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表