【题目描述】
大数学家高斯小时候偶然间发现一种有趣的自然数集合Blah,对于以a为基的集合Ba定义如下:
(1)a是集合Ba的基,且a是Ba的第一个元素;
(2)如果x在集合Ba中,则2x+1和3x+1也都在集合Ba中;
(3)没有其他元素在集合Ba中了。
现在小高斯想知道如果将集合Ba中元素按照升序排列,第N个元素会是多少?
【题目链接】
http://ybt.ssoier.cn:8088/problem_show.php?pid=1333
【代码】
1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 ll rec[1000010],tot; 5 int p1,p2,a,n,i; 6 int main() 7 { 8 while(scanf("%d%d",&a,&n)!=EOF) { 9 tot=0; 10 rec[++tot]=a; 11 p1=p2=1; 12 while(tot<=n) { 13 ll a1=rec[p1]*2+1,a2=rec[p2]*3+1; 14 if(a1<a2) p1++; else p2++,a1=a2; 15 if(a1!=rec[tot]) rec[++tot]=a1; 16 } 17 printf("%lld\n",rec[n]); 18 } 19 return 0; 20 }