这是一道二分法的题目,许久不使用二分法,感觉有点生疏。

#include<bits/stdc++.h>
using namespace std;
const int MAXN=100000+5;
vector<int> vec;
int N,p;
int binarySearch(int i,long long x){
if(vec[N-1]<=x) return N;
int l=i+1,r=N-1,mid;
while(l<r){
mid=(l+r)/2;
if(vec[mid]<=x)l=mid+1;
else r=mid;
}
return l;
}
int main(){
scanf("%d %d",&N,&p);
for(int i=0;i<N;i++){
int x;
scanf("%d",&x);
vec.push_back(x);
}
//sort
sort(vec.begin(),vec.end());
int ans = 1;//max length=1
for(int i=0;i<N;i++){
//vec[i+1]~vec[n-1]
int j=binarySearch(i,(long long)vec[i]*p);
ans=max(ans,j-i);//update
}
printf("%d\n",ans);
return 0;
}

注意点:

  1. vec[i] x p,已经超出了int的范围,用long long。
  2. 二分的前提是先排序。
  3. 通过指针l与指针r不断地缩小搜索范围,指针mid当中介,当lr相等时,查询结束。

以下,用c++提供的upper_bound函数解决,内部也采用二分实现。

#include<bits/stdc++.h>
using namespace std;
vector<int> vec;
int N,p;
int main(){
scanf("%d %d",&N,&p);
for(int i=0;i<N;i++){
int x;
scanf("%d",&x);
vec.push_back(x);
}
//sort
sort(vec.begin(),vec.end());
int ans = 1;//max length=1
for(int i=0;i<N;i++){
//vec[i+1]~vec[n-1]
int j=upper_bound(&vec[i+1],&vec[N],(long long)vec[i]*p)-&vec[0];
ans=max(ans,j-i);//update
}
printf("%d\n",ans);
return 0;
}

B1030 完美数列 (25 分)的更多相关文章

  1. PAT Basic 1030 完美数列 (25 分)

    给定一个正整数数列,和正整数 p,设这个数列中的最大值是 M,最小值是 m,如果 M≤mp,则称这个数列是完美数列. 现在给定参数 p 和一些正整数,请你从中选择尽可能多的数构成一个完美数列. 输入格 ...

  2. 1030 完美数列 (25 分)C、Java、python

    题目描述 给定一个正整数数列,和正整数p,设这个数列中的最大值是M,最小值是m,如果M <= m * p,则称这个数列是完美数列. 现在给定参数p和一些正整数,请你从中选择尽可能多的数构成一个完 ...

  3. PAT (Basic Level) Practice (中文)1030 完美数列 (25 分) (有点意思)

    给定一个正整数数列,和正整数 p,设这个数列中的最大值是 M,最小值是 m,如果 M≤mp,则称这个数列是完美数列. 现在给定参数 p 和一些正整数,请你从中选择尽可能多的数构成一个完美数列. 输入格 ...

  4. PAT乙级 1030. 完美数列(25)

    1030. 完美数列(25) 时间限制 300 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CAO, Peng 给定一个正整数数列,和正整数p,设这 ...

  5. PAT-乙级-1030. 完美数列(25)

    1030. 完美数列(25) 时间限制 300 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CAO, Peng 给定一个正整数数列,和正整数p,设这 ...

  6. PAT 乙级1030 完美数列(25) C++版

    1030. 完美数列(25) 时间限制 300 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CAO, Peng 给定一个正整数数列,和正整数p,设这 ...

  7. PAT (Basic Level) Practise (中文)-1030. 完美数列(25)

    PAT (Basic Level) Practise (中文)-1030. 完美数列(25)   http://www.patest.cn/contests/pat-b-practise/1030 给 ...

  8. PAT B1030 完美数列 (25 分)

    给定一个正整数数列,和正整数 p,设这个数列中的最大值是 M,最小值是 m,如果 M≤mp,则称这个数列是完美数列. 现在给定参数 p 和一些正整数,请你从中选择尽可能多的数构成一个完美数列. 输入格 ...

  9. 【算法笔记】B1030 完美数列(三种方法)

    1030 完美数列 (25 分) 给定一个正整数数列,和正整数 p,设这个数列中的最大值是 M,最小值是 m,如果 M≤mp,则称这个数列是完美数列. 现在给定参数 p 和一些正整数,请你从中选择尽可 ...

  10. PAT 1030. 完美数列(25)

    给定一个正整数数列,和正整数p,设这个数列中的最大值是M,最小值是m,如果M <= m * p,则称这个数列是完美数列. 现在给定参数p和一些正整数,请你从中选择尽可能多的数构成一个完美数列. ...

随机推荐

  1. 【转】Mysql学习---MySQL悲观锁中的排它锁

    [原文]https://www.toutiao.com/i6595305814087434760/ 悲观锁中的排它锁. 排它锁关键字:for update 特点:会锁住行或者表,防止其他事务进行修改操 ...

  2. LVM卷的创建及案例演示

    LVM:Logical Volume Manager, Version:2dm: device mapper,将一个或多个底层块设备组织成一个逻辑设备的模块. /dev/dm-# 这里的#表示数字,代 ...

  3. KMS服务器软件-windows/OpenWRT-X64版

    软件项目: https://github.com/Wind4/vlmcsd windows版kms服务器 https://files.cnblogs.com/files/SilenceRet/vlmc ...

  4. String、StringBuffer与StringBuilder的区别-陈远波

    String Stringbuffer  StringBuilder的区别: 1.string是字符串常量,且长度是不可改变的,Stringbuffer.stringBuilder是字符串变量 2.S ...

  5. 8.2Solr API使用(Facet查询)

    转载请出自出处:http://eksliang.iteye.com/blog/2165882 一)概述 Facet是solr的高级搜索功能之一,可以给用户提供更友好的搜索体验.在搜索关键字的同时,能够 ...

  6. Winfrom 使用WCF 实现双工通讯

    实现双工通讯主要分三步. 通信接口的定义: 被调用接口的实现 双工通道的建立 请先引用DLL(CSDN的代码编辑器真尼玛蛋疼) 整个解决方案的结构 1.通信接口的定义: 服务端调用客户端接口IServ ...

  7. Spark2.3文档翻阅的一点简略笔记(WaterMarking)

    写本文原因是之前已经将官网文档阅读过几遍,但是后来工作接触spark机会较少所以没有跟进新特性,利用周末一点闲暇时间粗略阅读一篇,将自己之前遇见过的问题解决过的问题印象不深刻的问题做一下记录. 1关于 ...

  8. jquery mouseover与mouseenter区别

    <!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/xhtml"> ...

  9. cURL函数库错误码说明之PHP curl_errno函数

    背景概述:游戏接口是使用PHP cURL扩展进行请求操作.但是,被请求的服务器经常会无故的不响应或者超时.总之,就是请求之后收不到响应回来的数据.这时候可不能说对方API接口有问题,或者,服务器有故障 ...

  10. STM32 低功耗 调试心得

    MCU在进入STOP模式的时候,GPIO的状态都是保持在进入低功耗模式之前的状态,在最小系统中,MCU的GPIO都是悬空的,所以设置为何种状态都不会影响到功耗.但当连接到外设后,外设的电平状态和所连接 ...