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. Python中的not, and, or

    logical_operator_lst = [ ('and 与运算',), ('or 或运算',), ('not 非运算',), ('逻辑运算符的优先级',), ('实例',), ('练习',), ...

  2. 边缘检测 opencv

    本次实验使用了两种方法进行了边缘检测,分别使用到了opencv中的两个API函数为Canny()和Sobel()函数.实验后加了Scharr滤波器,它其实是基于Sobel()函数的. 这三个API中的 ...

  3. mysql sum 为 0 的解决方法

    使用SQL语句SUM函数的时候,默认查询没有值的情况下返回的是null,而实际可能我们要用的是返回0. 解决方法:SELECT SUM(count) FROM test_table 改成: SELEC ...

  4. Android 拍照或相册选择照片进行显示缩放位图 Demo

    拍照后直接使用 BitmapFactory.decodeStream(...) 进行创建 Bitmap 并显示是有问题的. Bitmap 是个简单对象,它只存储实际像素数据,也就是说,即使原始照片已压 ...

  5. spark中的RDD以及DAG

    今天,我们就先聊一下spark中的DAG以及RDD的相关的内容 1.DAG:有向无环图:有方向,无闭环,代表着数据的流向,这个DAG的边界则是Action方法的执行 2.如何将DAG切分stage,s ...

  6. HTTPClient和HttpURLConnection实例对比

    HttpURLConnection是java的标准类,什么都没封装. HTTPClient是个开源框架,封装了访问http的请求头,参数,内容体,响应等等. 简单来说,HTTPClient就是一个增强 ...

  7. QQ空间相册展示特效

    <!doctype html> <html lang="en"> <head> <title>QQ空间相册展示特效<title ...

  8. maven中scope标签作用

    scope 是用来限制 dependency 的作用范围的,影响 maven 项目在各个生命周期时导入的 package 的状态,主要管理依赖的部署. scope 的作用范围: (1)compile: ...

  9. 孤荷凌寒自学python第十一天初识Python的字典类

    孤荷凌寒自学python第十一天初识Python的字典类 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) Python的字典其实是一张二维对照表 下面举例说明: 键名Key 姓名 性别 身高 ...

  10. 【Linux】wc :字数统计命令

    wc :(Word Count) 统计每个传入文件中行数.词数与字节数 $ wc py_this # 三个数字分别对应行数.词数和字节数 21 144 857 py_this $ wc py_this ...