华师一附中OI组

标题: P1062 数列 [打印本页]

作者: admin    时间: 2018-7-4 23:44
标题: P1062 数列
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 普及组 第四题
作者: 倚窗倾听风吹雨    时间: 2018-10-2 15:47
  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. }
复制代码





欢迎光临 华师一附中OI组 (http://hsyit.cn/) Powered by Discuz! X3.2