• 【分类讨论】【set】Codeforces Round #407 (Div. 2) B. Masha and geometric depression


    模拟一下那个过程,直到绝对值超过l,或者出现循环为止。

    如果结束之后,绝对值是超过l的,就输出当前写在黑板上的数量。

    如果出现循环,则如果写在黑板上的数量非零,则输出inf(注意!如果陷入的循环是一个全部被禁止的循环,但是黑板上有输出的值,则还是应该输出黑板上的值的数量。这种情况用循环再向后扫几项判一下即可。),否则输出0。

    用三个set处理。

    #include<cstdio>
    #include<set>
    using namespace std;
    typedef long long ll;
    ll Abs(ll x){
    	return x<0 ? (-x) : x;
    }
    int b1,q,l,m,a[100100];
    set<int>S,S2,S3;
    int main(){
    //	freopen("b.in","r",stdin);
    	scanf("%d%d%d%d",&b1,&q,&l,&m);
    	for(int i=1;i<=m;++i){
    		scanf("%d",&a[i]);
    		S.insert(a[i]);
    	}
    	ll b=b1;
    	while(1){
    		if(Abs(b)>(ll)l || S2.find(b)!=S2.end()){
    			break;
    		}
    		S2.insert(b);
    		if(S.find(b)==S.end()){
    			S3.insert(b);
    		}
    		b*=(ll)q;
    	}
    	if(Abs(b)<=(ll)l){
    		if(S3.size()){
    			bool flag=0;
    			for(int i=1;i<=100000;++i){
    				b*=(ll)q;
    				if(S.find(b)==S.end()){
    					flag=1;
    					break;
    				}
    				S3.erase((int)b);
    			}
    			if(flag){
    				puts("inf");
    			}
    			else{
    				printf("%d
    ",S3.size());
    			}
    		}
    		else{
    			puts("0");
    		}
    	}
    	else{
    		printf("%d
    ",S3.size());
    	}
    	return 0;
    }
  • 相关阅读:
    C语言实现大数计算
    shell编程题(九)
    shell编程题(八)
    信号(一)
    shell编程题(六)
    C语言实现webServer
    chrome导入导出常用书签
    JdbcTemplate
    数据库连接池
    JDBC
  • 原文地址:https://www.cnblogs.com/autsky-jadek/p/6644709.html
Copyright © 2020-2023  润新知