zoukankan      html  css  js  c++  java
  • Blash

    【问题描述】
    大数学家高斯小时候偶然间发现一种有趣的自然数集合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

    【输出格式】
    对于每个输入,输出集合Ba的第n个元素值

    【样例输入】
    1 100

    28 5437

    【样例输出】
    418 900585

    【数据规模与约定】
    对于20%的数据,n<=1000
    对于100%的数据,n<=100000,a<=50

    数据组数小于5


     虽然在讲队列时学过,但考试就全忘光。

    思路:

    其实很简单,用一个 a[ ] 存储 2*x+1 , b[ ] 存储 3*x+1 , 不断从两个数组里取小的更新后面的 ,再计个数,到 n 了就打断输出即可

    代码:

    #include<stdio.h>
    const int MX=1000010;
    int a[MX],b[MX]; 
    
    int main()
    {
        freopen("blash.in","r",stdin),freopen("blash.out","w",stdout);
        int x,n;
        while(scanf("%d%d",&x,&n)!=EOF)
        {
            int tot=1,la=0,lb=0,ra=1,rb=1;
            while(1)
            {
                if(tot==n) {
                    printf("%d
    ",x);
                    break;
                }
                a[++la]=2*x+1;
                b[++lb]=3*x+1;
                if(a[ra]<b[rb]) {
                    x=a[ra++];
                }
                else if(b[rb]<a[ra]) {
                    x=b[rb++];
                }
                else {
                    x=a[ra++];
                    rb++;
                }
                tot++;
            }
        }
        return 0;
    }
    从0到1很难,但从1到100很容易
  • 相关阅读:
    SharePoint 2010 获取当前用户的权限
    SharePoint 2010 移除Ribbon菜单中的命令项
    SqlServer2000孤立用户解决方案
    Hello Go!
    XMLHttpRequest对象介绍——1
    Struts 2 简单配置
    asp.net 2.0热贴收藏
    .NET牛人应该知道些什么(转)?
    ASP.net 2.0 中 WebResource.axd 管理资源的一些知识点
    asp.net中的异步页面
  • 原文地址:https://www.cnblogs.com/qseer/p/9539081.html
Copyright © 2011-2022 走看看