CodeForces - 789B

当时题意理解的有点偏差,一直wa在了14组。是q等于0的时候,b1的绝对值大于l的时候,当b1的绝对值大于l的时候就应该直接终端掉,不应该管后面的0的。

题意告诉你b1,q,l,m然后b1和q是一个等比序列的首项和公比,然后l是这个序列出现的数绝对值的最大值。m代表序列有m个数不能被计算在内。问你能写出的最多的序列的元素个数。如果有无限多个输出inf。

分析一下,首先就是无限多个出现的情况。

1.b1==0。此时的序列是无限个0,只要0不在m个数中就是inf,否则就是0。

2.q==0。此时的序列就是b1 +无限个0。首先就是判断一下b1的绝对值是不是大于l,是就输出0.

不是的话就看一看0是不是出现在m个数中,如果没有,就输出inf,否则看一下b1是不是出现在m个数中,如果没有输出1,否则输出0。

3.还有就是q的绝对值等于1的时候,可能出现无限个。

q==1数列就是无限个b1,只要b1不在m个数中就是inf,否则就是0。

q==-1数列就是无限个b1和-b1,看一下b1和-b1是不是出现在m个数中,如果都有就是0,否则就是inf。

4.剩下的情况就没有无限个出现了。

这时候直接从b1不断乘q得到序列的值判断有没有出现在m个数中然后累加就可以了。

原始思路:AC

注意:每种思路有不同解决方法,也可能犯不同的错误

注意lld规范输入输出

分类讨论清楚

若一直错在同一点,赶快换种解法

#include "cstdio"
#include "map"
#include "cstring"
#include "cmath"
#include "iostream"
using namespace std;
#define LL long long
map<LL,LL> arr;
int main()
{
LL b,q,l,m;
while(scanf("%lld%lld%lld%lld",&b,&q,&l,&m)!=EOF)
{
arr.clear();
LL x;
for(int i=;i<m;i++)
{
scanf("%lld",&x);
arr[x]++;
}
LL flag=,cnt=;
LL tm=abs(b);
if(b==||q==)
{
if(tm<=l&&arr.find(b)==arr.end())
{
flag=;
}else
{
flag=;
}
}
else if(q==-)
{
if(tm<=l&&(arr.find(b)==arr.end()||arr.find(-b)==arr.end()))
{
flag=;
}else
{
flag=;
}
}
else if(q==)
{
if(tm<=l&&arr.find(b)==arr.end())
{
flag=;cnt++;
}
else
{
flag=;
}
if(tm<=l){///这里不处理,wrong在第14组,要求一遇到>l的直接不管后面,所以这种思路易出错,还找不出原因
if(<=l&&arr.find()==arr.end()){
flag=;
}
}
}
else if(q<)
{
flag=;
while()
{
if(tm>l)break;
if(tm<=l&&arr.find(b)==arr.end())
{
cnt++;
}
tm*=(-q);
b*=q;
}
}
else if(q>)
{
flag=;
while()
{
if(tm>l)break;
if(tm<=l&&arr.find(b)==arr.end())
{
cnt++;
}
tm*=q;
b*=q;
}
}
if(flag==){
printf("0\n");
}
else if(flag==)
{
printf("inf\n");
}
else if(flag==)
{
printf("%lld\n",cnt);
}
}
return ;
}

解法二:

题意:给出等比数列的b1,q,m个数,问是在等比数列中且不在M个数中又小于l的数的个数。无穷输出inf。 
题解:因为是等比数列所以增长很块。暴力求解即可。

可以,可以。。。。。如此。。手段,也是经验丰富

http://www.voidcn.com/blog/qq_33183401/article/p-6543935.html

#include<bits/stdc++.h>
#define ll long long
using namespace std;
set<ll>s;
map<ll,int>mp;
ll b,q,l,m,k;
int main()
{
cin>>b>>q>>l>>m;
for(int i=; i<m; i++)
{
cin>>k;
s.insert(k);
}
int cnt=;
ll ans=;
while(cnt<)
{
cnt++;
if(abs(b)>l) break;
if(s.find(b)==s.end())
ans++;
b*=q;
}
if(ans>)
cout<<"inf"<<endl;
else
cout<<ans<<endl;
}

CodeForces - 789B B. Masha and geometric depression---(水坑 分类讨论)的更多相关文章

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

    B. Masha and geometric depression 题意 在黑板上写数列,首项是b,公比是q,超过l时就停止不写.给定m个数,遇到后跳过不写.问一共写多少个数,如果无穷个输出inf. ...

  2. 【codeforces 789B】Masha and geometric depression

    [题目链接]:http://codeforces.com/contest/789/problem/B [题意] 让你一个一个地写出等比数列的每一项 (注意是一个一个地写出); 有m个数字不能写; 且数 ...

  3. CF789B. Masha and geometric depression

    /* CF789B. Masha and geometric depression http://codeforces.com/contest/789/problem/B 水题 各种特判,贼烦 */ ...

  4. codeforces 789 B. Masha and geometric

    链接 B. Masha and geometric depression 题意 给你一个等比数列的首项和公比q,然后给出一个上限l,m个数字,在这个等比数列里,小于l且没有在m个数字里面出现过的可以写 ...

  5. Codeforces 521E - Cycling City(点双连通分量+分类讨论)

    Codeforces 题面传送门 & 洛谷题面传送门 大家都是暴力找生成树然后跳路径,代码不到 50 行(暴论)的一说--好,那本蒟蒻决定提供一种代码 150 行,但复杂度也是线性的分类讨论做 ...

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

    模拟一下那个过程,直到绝对值超过l,或者出现循环为止. 如果结束之后,绝对值是超过l的,就输出当前写在黑板上的数量. 如果出现循环,则如果写在黑板上的数量非零,则输出inf(注意!如果陷入的循环是一个 ...

  7. Codeforces 1236F - Alice and the Cactus(期望+分类讨论)

    Codeforces 题面传送门 & 洛谷题面传送门 期望好题. 首先拆方差: \[\begin{aligned} &E((x-E(x))^2)\\ =&E(x^2)-2E(x ...

  8. Codeforces Round #451 (Div. 2) A. Rounding【分类讨论/易错】

    A. Rounding time limit per test 1 second memory limit per test 256 megabytes input standard input ou ...

  9. Codeforces 685C - Optimal Point(分类讨论+乱搞)

    Codeforces 题面传送门 & 洛谷题面传送门 分类讨论神题. 首先看到最大值最小,一眼二分答案,于是问题转化为判定性问题,即是否 \(\exists x_0,y_0,z_0\) 满足 ...

随机推荐

  1. echarts零基础快速入门

    第一步:得到这个dom对象.然后进行各种操作. var myChart = echarts.init(document.getElementById('item1')); 第二步:所有的配置项全部放在 ...

  2. windows下的node.js和npm的安装步骤详解

    一.使用之前,我们先来掌握3个东西是用来干什么的. npm: Nodejs下的包管理器. webpack: 它主要的用途是通过CommonJS的语法把所有浏览器端需要发布的静态资源做相应的准备,比如资 ...

  3. SQL-批量插入和批量更新

    批量插入 表结构一样或类似 如果两张表的结构一样,例如一个表的结构和另一个表的结构一样,只是其中一张是临时表,而另一张表是存储数据的表,我们需要进行一次表的迁移的话,我们可以这样. insert in ...

  4. 浅谈XX系统跨平台迁移(测试环境)

    一 概述 XX系统目前运行在XX-A的云平台上,计划将其迁移至XX-B的云平台. XX系统是java开发,中间组件涉及nginx+keepalived实现各个业务系统之间的高可用,kafka,zook ...

  5. 模块hashlib和logging

    Python的hashlib提供了常见的摘要算法MD5. 我们以常见的摘要算法MD5为例,计算出一个字符串的MD5值: import hashlib md5=hashlib.md5() md5.upd ...

  6. 非阻塞IO模板

    服务端 from socke import * server = socket(AF_INET, SOCK_STREAM) server.bind(('127.0.0.1',8083)) server ...

  7. Android stadio 自定义debug release keystore

    1.添加siggnig name 随意,不过按我写的就可以了.设置完成之后,你的build.grade就会多出来一些: android { signingConfigs { signingConfig ...

  8. 部署 CA 和 NPS 服务器证书

    TechNet 库 Windows Server Windows Server 2008 R2 und Windows Server 2008 按类别提供的 Windows Server 内容 按类别 ...

  9. PHP字符串word末字符大小写互换

    要求 给出一个字符串如 “A journey of, a thousand 'miles' must can't \"begin\" with a single step.” ,通 ...

  10. eclipse集成python(Pydev插件安装)

    1.下载PyDev的压缩包,解压后会有features和plugins两个文件夹,将两个文件夹的内容拷贝到eclipse对应的文件夹中,重新启动eclipse 2.配置python 2.1打开ecli ...