1030 完美数列 (25 分)二分
给定一个正整数数列,和正整数 p,设这个数列中的最大值是 M,最小值是 m,如果 M≤mp,则称这个数列是完美数列。
现在给定参数 p 和一些正整数,请你从中选择尽可能多的数构成一个完美数列。
输入格式:
输入第一行给出两个正整数 N 和 p,其中 N(≤105)是输入的正整数的个数,p(≤109)是给定的参数。第二行给出 N 个正整数,每个数不超过 109。
输出格式:
在一行中输出最多可以选择多少个数可以用它们组成一个完美数列。
输入样例:
10 8
2 3 20 4 5 1 6 7 8 9
输出样例:
8
思路 先对数列进行排序,然后枚举左端点也就是最小值m,然后查找一个尽可能大的右端点M使得M<=m*p,由于数列已经排序,所以可以使用二分查找。upper_bound()返回第一个大于待查找元素的数列元素的下标,如果没有找到,返回第n个元素(不存在),所以需要进行返回值判断。注意点是m*p会超过int。code 1:手写二分
#include<iostream> #include<string> #include<vector> #include<string> #include<cstdio> #include<cmath> #include<string.h> #include<algorithm> #include<unordered_map> #include<stack> using namespace std;int main() {int n,p;scanf("%d%d",&n,&p);long long int a[n];for(int i=0;i<n;i++)scanf("%lld",&a[i]);sort(a,a+n);int maxv=0;for(int i=0;i<n;i++){int left=i,right=n-1,ans=-1;while(left<=right){int mid=left+(right-left)/2;if(a[mid]<=a[i]*p){ans=mid;left=mid+1;}elseright=mid-1;}if(ans!=-1)maxv=max(maxv,ans-i+1);}cout<<maxv;return 0; }
code2 使用库函数
#include<iostream> #include<string> #include<vector> #include<string> #include<cstdio> #include<cmath> #include<string.h> #include<algorithm> #include<unordered_map> #include<stack> using namespace std;int main() {int n;long long p;scanf("%d%lld",&n,&p);long long int a[n];for(int i=0;i<n;i++)scanf("%lld",&a[i]);sort(a,a+n);int maxv=0;for(int i=0;i<n;i++){int index=upper_bound(a+i,a+n,a[i]*p)-a;if(index==n)index--;while(a[index]>a[i]*p) index--;maxv=max(maxv,index-i+1);}cout<<maxv;return 0; }
转载于:https://www.cnblogs.com/zhanghaijie/p/10406416.html
1030 完美数列 (25 分)二分相关推荐
- C++学习之路 | PTA乙级—— 1030 完美数列 (25 分)(精简)
1030 完美数列 (25 分) 给定一个正整数数列,和正整数 p,设这个数列中的最大值是 M,最小值是 m,如果 M≤mp,则称这个数列是完美数列. 现在给定参数 p 和一些正整数,请你从中选择尽可 ...
- PAT乙级1030 完美数列 (25 分)
1030 完美数列 (25 分) 给定一个正整数数列,和正整数 p,设这个数列中的最大值是 M,最小值是 m,如果 M≤mp,则称这个数列是完美数列. 现在给定参数 p 和一些正整数,请你从中选择尽可 ...
- 【PAT乙】1030 完美数列 (25分) 枚举
1030 完美数列 (25分) 给定一个正整数数列,和正整数 p,设这个数列中的最大值是 M,最小值是 m,如果 M≤mp,则称这个数列是完美数列. 现在给定参数 p 和一些正整数,请你从中选择尽可能 ...
- 【PAT (Basic Level) 】1030 完美数列 (25 分)
给定一个正整数数列,和正整数 p,设这个数列中的最大值是 M,最小值是 m,如果 M≤mp,则称这个数列是完美数列. 现在给定参数 p 和一些正整数,请你从中选择尽可能多的数构成一个完美数列. [输入 ...
- 1030 完美数列 (25 分)(c语言)
给定一个正整数数列,和正整数 p,设这个数列中的最大值是 M,最小值是 m,如果 M≤mp,则称这个数列是完美数列. 现在给定参数 p 和一些正整数,请你从中选择尽可能多的数构成一个完美数列. 输入格 ...
- 【最优解法】1030 完美数列 (25分)_23行代码AC
立志用最少的代码做最高效的表达 PAT乙级最优题解-->传送门 给定一个正整数数列,和正整数 p,设这个数列中的最大值是 M,最小值是 m,如果 M≤mp,则称这个数列是完美数列. 现在给定参数 ...
- 【PAT乙级】1030 完美数列 (25 分)
题目地址 #include<cstdio> #include<iostream> #include<algorithm> using namespace std; ...
- 1030. 完美数列(25)
1030. 完美数列(25) 时间限制 300 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CAO, Peng 给定一个正整数数列,和正整数p,设这 ...
- 1030. 完美数列(25)-PAT乙级真题
给定一个正整数数列,和正整数p,设这个数列中的最大值是M,最小值是m,如果M <= m * p,则称这个数列是完美数列. 现在给定参数p和一些正整数,请你从中选择尽可能多的数构成一个完美数列. ...
- PAT乙级练习题1030 完美数列
题目: 给定一个正整数数列,和正整数 p,设这个数列中的最大值是 M,最小值是 m,如果 M≤mp,则称这个数列是完美数列. 现在给定参数 p 和一些正整数,请你从中选择尽可能多的数构成一个完美数列. ...
最新文章
- Python 中常见的配置文件写法
- 使用SpringBoot开启微服务之旅
- 【学术相关】研究生第一篇学术论文常犯问题总结
- android java和c混合编程_C/C++在Java、Android和Objective-C三大平台下实现混合编程
- 腾讯云DevOps技术揭秘:新时代运维重器Tencent Hub最佳实践
- centos mysql 允许远程访问
- 深度linux缺点,原来国产深度系统有这些“缺陷”,难怪只有少数人在使用!
- 企业级账号 版本更新总结
- 智伴机器人广西团队_畅想科技 智绘未来——2020年全区乡村学校少年宫科技体验日活动在广西科技馆举办...
- POJ3287(BFS水题)
- ajaxfileupload 返回值_ajaxFileUpload上传带参数,返回值改成json格式
- 阶段3 1.Mybatis_08.动态SQL_02.mybatis中动态sql语句-where标签的使用
- 《C语言及程序设计》程序阅读——数组与指针
- 凯撒密码中有数字怎么办_密码学入门之密码
- excel表中怎么插入visio_Microsoft Visio2007中vsdx文件怎么打开|Visio插入表格方法
- Java输入/输出(I/O)流
- noob的python学习之路
- 纯C#实现JPEG解码器在超大图片切割中的应用
- 妈妈再也不用担心我的博客访问量了(一个可以刷博客访问量的小程序java)
- 数据库驱动程序是什么?
热门文章
- 【HDU - 5009】Paint Pearls(dp,链表优化dp)
- 【CodeForces - 574B】Bear and Three Musketeers (枚举边,思维,优秀暴力)
- 【CodeForces - 833A】The Meaningless Game(思维题,数学,可用牛顿迭代法,知识点总结)
- 【CF#706B】 Interesting drink (二分)
- [sicily]【1001】 会议安排(田忌赛马类贪心)
- createform用法_vue自定义表单生成器form-create使用详解
- java构建xml参数_Java中使用XML创建EMAIL模板
- django 返回ajax html,Django 前台通过json 取出后台数据
- MySQL 事务 | ACID、四种隔离级别、并发带来的隔离问题、事务的使用与实现
- 你真的了解静态变量、常量的存储位置吗?