【cf789B】Masha and geometric depression(分类讨论/暴力)

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;
}
posted @ 2017-09-01 13:59  水郁  阅读(529)  评论(0编辑  收藏  举报
……