B. Masha and geometric depression
题意
在黑板上写数列,首项是b,公比是q,超过l时就停止不写。给定m个数,遇到后跳过不写。问一共写多少个数,如果无穷个输出inf。
题解
分类讨论要注意b大于l,则一个也不会写。(仔细读题!!
暴力的话,可以用map或者set,然后遇到重复的就是inf。
代码
const int N = 2000001;
ll b,q,u,m;
ll a[N];
int main(){
while(~scanf("%lld%lld%lld%lld",&b,&q,&u,&m)){
rep(i,0,m)scanf("%lld",a+i);
sort(a,a+m);
bool bad=0,badb=0,badbb=0;
rep(i,0,m){
bad|=a[i]==0;
badb|=a[i]==b;
badbb|=a[i]==-b;
}
if(abs(b)>u)
puts("0");
else if(q==1){
puts(badb?"0":"inf");
}else if(q==0||b==0){
if(bad)
puts(badb||b==0?"0":"1");
else
puts("inf");
}else if(q==-1){
puts(badb&&badbb?"0":"inf");
}else {
int ans=0;
for(;abs(b)<=u;b*=q){
if(a[lower_bound(a, a+m, b)-a]!=b)
++ans;
}
printf("%d\n",ans);
}
}
return 0;
}