PAT 1030完美数列
来源:互联网 发布:无主之地2淘宝 编辑:程序博客网 时间:2024/05/21 22:50
0.背景
给定一个正整数数列,和正整数p,设这个数列中的最大值是M,最小值是m,如果M <= m * p,则称这个数列是完美数列。
现在给定参数p和一些正整数,请你从中选择尽可能多的数构成一个完美数列。
输入格式:
输入第一行给出两个正整数N和p,其中N(<= 105)是输入的正整数的个数,p(<= 109)是给定的参数。第二行给出N个正整数,每个数不超过109。
输出格式:
在一行中输出最多可以选择多少个数可以用它们组成一个完美数列。
输入样例:
10 8
2 3 20 4 5 1 6 7 8 9
输出样例:
8
1.这里我还想介绍一下二分法,关于二分法的具体说明,见例中代码。
2.参考代码如下:
#include <stdio.h>#include <algorithm>using namespace std;int array[100002];//二分法查找 ---> 找到第一个比number大的数int halfSearch(int left,int right, long long number) { //这里假设存在一个数即array[right+1]大于number,但实际上这个数是不存在的 if(array[right] <= number){ return right+1; } int mid; while(left < right ){//当两者相等的时候,返回 mid = (left + right) / 2; if(array[mid] <= number ){ left = mid + 1 ; /*为什么这里是left = mid+1呢?---->因为我们要找到的这个数是比number大的数,所以有以下两种情况: (1)当array[mid] < number 时,那么第一个大于number的数肯定在mid的右边,即加一 (2)当array[mid] = number 时,那么第一个大于number的数仍然在mid的右边,所以还需加一 */ } else{ right = mid; /*那么为什么这里是right = mid呢? ---> 因为我们需要找到的这个数是比number大的数,所以有下面的情况: 因为array[mid] > number,所以当前第mid位肯定为大于number的数,但是mid-1不一定是大于number的数 */ } } return left;}int main(){ int N,p; scanf("%d %d",&N,&p); int i; for (i = 0;i<N;i++){ scanf("%d",&array[i]); } //进行排序 sort(array,array+N); int max = 0; for(i = 0;i<N;i++){ int j = halfSearch(i,N-1,(long long)array[i]*p); if(max < j -i){ max = j - i; } } printf("%d",max);}/**10 82 3 20 4 5 1 6 7 8 9**/3.我们要注意该二分法的作用是什么,比如说,在本题中,我们需要找到第一个比number大的数即可。针对不同的需求,我们的代码可能有着不同的改变,但是大多数都是相同的。
0 0
- PAT 1030完美数列
- PAT 1030完美数列
- 完美数列(PAT-1030)
- PAT乙级1030 完美数列
- PAT 1030 完美数列(25)
- Pat(Basic Level)Practice--1030(完美数列)
- PAT(basic level) 1030 完美数列(25)
- PAT(Python)-1030:完美数列(25)
- PAT 乙等 1030 完美数列
- pat 1030. 完美数列
- PAT B1030. 完美数列
- 【PAT】1030. 完美数列(25)
- PAT乙级 完美数列(25)
- PAT--完美数列-快速搜索
- PAT 乙级 1030.完美数列
- PAT-B 1030. 完美数列
- PAT-B 1030. 完美数列
- [PAT-乙级]1030.完美数列
- java笔记
- ANDROID SUPPORT兼容包详解
- 指出下面程序的运行结果
- Laravel最佳分割路由文件(routes.php)的方式
- UVA 514 Rails
- PAT 1030完美数列
- 64. Minimum Path Sum**
- 简单的遗传算法(Genetic algorithms)-吃豆人
- WIFI基本知识整理
- 串行通讯之.NET SerialPort异步写数据
- spring mvc中配置aop
- 毕业论文_开题报告
- java线程学习二
- python解析json