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

┆凉┆暖┆降┆等┆幸┆我┆我┆里┆将┆ ┆可┆有┆谦┆戮┆那┆ ┆大┆始┆ ┆然┆
┆薄┆一┆临┆你┆的┆还┆没┆ ┆来┆ ┆是┆来┆逊┆没┆些┆ ┆雁┆终┆ ┆而┆
┆ ┆暖┆ ┆如┆地┆站┆有┆ ┆也┆ ┆我┆ ┆的┆有┆精┆ ┆也┆没┆ ┆你┆
┆ ┆这┆ ┆试┆方┆在┆逃┆ ┆会┆ ┆在┆ ┆清┆来┆准┆ ┆没┆有┆ ┆没┆
┆ ┆生┆ ┆探┆ ┆最┆避┆ ┆在┆ ┆这┆ ┆晨┆ ┆的┆ ┆有┆来┆ ┆有┆
┆ ┆之┆ ┆般┆ ┆不┆ ┆ ┆这┆ ┆里┆ ┆没┆ ┆杀┆ ┆来┆ ┆ ┆来┆