zoukankan      html  css  js  c++  java
  • Blah数集

    描述大数学家高斯小时候偶然间发现一种有趣的自然数集合Blah,对于以a为基的集合Ba定义如下: (1) a是集合Ba的基,且a是Ba的第一个元素; (2)如果x在集合Ba中,则2x+1和3x+1也都在集合Ba中; (3)没有其他元素在集合Ba中了。 现在小高斯想知道如果将集合Ba中元素按照升序排列,第N个元素会是多少?输入输入包括很多行,每行输入包括两个数字,集合的基a(1<=a<=50))以及所求元素序号n(1<=n<=1000000)输出对于每个输入,输出集合Ba的第n个元素值样例输入

    1 100
    28 5437
    

    样例输出

    418
    900585
    
     1 #include<cstdio>
     2 using namespace std;
     3 const int N = 1000010;
     4 long long h2,h1,tail;
     5 long long q[N],a,n;
     6 
     7 int main()
     8 {
     9     while(scanf("%d%d",&a,&n)>0)
    10     {
    11         h1 = h2 = tail = 1;
    12         q[1] = a;
    13         while(tail < n)
    14         {
    15         long long t1 = (q[h1] << 1)+1;
    16         long long t2 = (q[h2]<<1)+q[h2]+1;
    17         if(t1 < t2)
    18         {
    19             q[++tail] = t1;
    20             h1++;
    21         }
    22         else if(t1 > t2)
    23         {
    24             q[++tail] = t2;
    25             h2++;
    26         }
    27         else
    28         {
    29             q[++tail] = t1;
    30             h1++;
    31             h2++;
    32         }
    33         }
    34         printf("%d
    ",q[tail]);
    35     }
    36     return 0;
    37 }

    用单调队列,定义两个指针,分别表示2x+1和3x+1,每次计算后比较, 小者入队,对应指针后移,若两者相等,则两个指针同时后移。

  • 相关阅读:
    随机数
    ASP .NET下的301重定向如何做
    网站外部链接建设方案
    解析ASP.NET WebForm和Mvc开发的区别
    委托、匿名委托和lambda表达式
    图片垂直居中
    jquery函数写法
    [转]函数方法常用的动词
    CSS Hack
    富文本编辑器
  • 原文地址:https://www.cnblogs.com/peppa/p/9605988.html
Copyright © 2011-2022 走看看