zoukankan      html  css  js  c++  java
  • SSLZYC 2391 数列

    题目大意:
    求1至n中,有几个至少符合下列条件之一的数字?
    1.(i-a)%b==0
    2.i==c*d^x


    思路:

    1.暴力,然而TLE+RE+WA

    2.暴力+公式,然而AC

    如果使用方法一,那么肯定很好理解,只需要两个普通的枚举或同就可以了。

    如果使用方法二,那么:
    (1)等差数列用公式直接推
    (2)等比数列模拟(反正项很少)


    代码:

    方法一:

    #include <cstdio>
    #include <iostream>
    using namespace std;
    
    int t[10010001],a,b,c,d,n,sum;  //t是桶
    
    int main()
    {
        scanf("%d%d%d%d%d",&a,&b,&c,&d,&n);
        while (a<=n)  //等差数列
        {
            t[a]=1;
            a+=b;
        }
        while (c<=n)  //等比数列
        {
            t[c]=1;
            c*=d;
        }
        for (int i=1;i<=n;i++)
         sum+=t[i];  //统计总数
        printf("%d\n",sum);
        return 0;
    }

    方法二:

    #include <cstdio>
    #include <iostream>
    using namespace std;
    
    long long a,b,c,d,n,sum;
    
    int main()
    {
        cin>>a>>b>>c>>d>>n;
        if (n>=a) sum=(n-a)/b+1;  //公式
        while (c<=n)  //等比数列
        {
            if ((c-a)%b!=0||c<a) sum++;
            c*=d;
            if (d==1) break;  //特殊情况:d=1时,永远c不变,死循环
        }
        cout<<sum<<endl;
        return 0;
    }
  • 相关阅读:
    查找->静态查找表->次优查找(静态树表)
    P1993-小K的农场
    P1983-车站分级
    P1268-树的重量
    P1113-杂务
    P1265-公路修建
    P2330-[SCOI2005]繁忙的都市
    P1546-最短网络
    P1144-最短路计数
    P1462-通往奥格瑞玛的道路
  • 原文地址:https://www.cnblogs.com/hello-tomorrow/p/9313079.html
Copyright © 2011-2022 走看看