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. PHP下载远程文件到指定目录

    PHP用curl可以轻松实现下载远程文件到指定目录: <?php class Download { public static function get($url, $file) { retur ...

  2. Form表单提交,js验证

    Form表单提交,js验证 1,  Onclick() 2, Onsubmit() Button标签 input (属性 submit  button )标签 Input type=button    ...

  3. 【机器学习算法基础+实战系列】SVM

    概述 支持向量机是一种二分类模型,间隔最大使它有别于感知机.支持向量机学习方法由简至繁的模型:线性可分支持向量机(linear support vector machine in linearly s ...

  4. C++ 十进制 八进制 十六进制的转换和关系

    在默认情况下,cout以十进制格式显示整数,而不管这些整数在程序中是如何书写的.如下面的程序所示: #include<iostream> using namespace std; #inc ...

  5. opencv中对图像的像素操作

    1.对灰度图像的像素操作: #include<iostream> #include<opencv2/opencv.hpp> using namespace std; using ...

  6. keil 使用C++编程主要要点

    1.中断处理,添加一下宏定义.如果不添加,中断服务函数不会链接到下载文件中:发生中断后,会停留在xxx.s文件的 "B ."语句. #ifdef __cplusplus exter ...

  7. MySQL忘记密码怎么重置

    1打开mysql.exe和mysqld.exe所在的文件夹,复制路径地址 输入命令  mysqld --skip-grant-tables  回车,此时就跳过了mysql的用户验证.注意输入此命令之后 ...

  8. 笔记-DB-mongodb-常用操作-1

    笔记-DB-mongodb-常用操作-1 1.  启动及连接 1.1.  启动 启动mongod windows下: 1.   如已添加服务 net start <service name> ...

  9. Android面试收集录7 AsyncTask详解

    1.Android中的线程 在操作系统中,线程是操作系统调度的最小单元,同时线程又是一种受限的系统资源,即线程不可能无限制地产生, 并且 **线程的创建和销毁都会有相应的开销.**当系统中存在大量的线 ...

  10. The Image Gallery Revisited

    Lets apply the Best practices to the Image Gallery . /*** index.html ***/ <!DOCTYPE html> < ...