1030. 完美数列(25)

来源:互联网 发布:大数据的结果展现方式 编辑:程序博客网 时间:2024/06/15 10:34

给定一个正整数数列,和正整数p,设这个数列中的最大值是M,最小值是m,如果M <= m * p,则称这个数列是完美数列。

现在给定参数p和一些正整数,请你从中选择尽可能多的数构成一个完美数列。

输入格式:

输入第一行给出两个正整数N和p,其中N(<= 105)是输入的正整数的个数,p(<= 109)是给定的参数。第二行给出N个正整数,每个数不超过109

输出格式:

在一行中输出最多可以选择多少个数可以用它们组成一个完美数列。

输入样例:
10 82 3 20 4 5 1 6 7 8 9
输出样例:

8


#include<iostream>#include<stdlib.h>#include<cmath>int cmp(const void * a, const void * b);int main(){using namespace std;int n;double p;cin >> n>>p;int max = 0;int tmp = 0;double *num = new double[n];for (int i = 0; i < n; i++)cin >> num[i];qsort(num, n, sizeof(double), cmp);//for (int i = 0; i < n; i++)//cout << num[i] << " ";int i = 0; int j = 0;while (j<n){if (num[j] <= num[i] * p)j++;else{tmp = j - i;if (tmp > max)max = tmp;i++; }if (j == n){tmp = j - i;if (tmp > max)max = tmp;i++;}}cout << max;}int cmp(const void * a, const void * b){if (fabs(*(double*)a - *(double *)b)<1 * exp(-20))return 0;elsereturn(((*(double*)a - *(double*)b)>0) ? 1 : -1);}


原创粉丝点击