关闭页面特效

SSL-ZYC 2391 数列

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


思路:

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

2.暴力+公式,然而AC

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

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


代码:

0|1方法一:


#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; }

0|1方法二:


#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; }
posted @   全OI最菜  阅读(111)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示