Think:
输入数组后 用STL 排序, 然后遍历, 判断是否满足MAX <= MIN * P; 的条件。 这题是多组输入 被坑了好多发!!!!!
Problem Description
小马哥是个追求完美的人,现在给定一个正整数数列,和正整数p,设这个数列中的最大值是M,最小值是m,如果M <= m * p,则称这个数列是完美的,现在给定参数p和一些正整数,请你从中选择尽可能多的数构成一个完美数列。
Input
输入第一行给出两个正整数N和p,其中N(<= 10^5)是输入的正整数的个数,p(<= 10^9)是给定的参数。第二行给出N个正整数,每个数不超过10^9。
Output
在一行中输出最多可以选择多少个数可以用它们组成一个完美数列。
Sample Input
10 3
1 2 4 3 10 9 8 7 6 5
Sample Output
7
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n, p;
int a[100050];
while(scanf("%d %d",&n,&p)!= EOF)
{
int i;
int cnt = 1;
memset(a, 0, sizeof(a));
for (i = 0;i <= n - 1;i ++)
{
scanf("%d",&a[i]);
}
sort(a, a + n);
int j;
for (i = 0;i < n - 1;i ++)
{
double MAX = a[i];
for (j = i + cnt;j <= n - 1;j ++)
{
double MIN = a[j];
if (MAX * p < MIN)
break;
if (j - i + 1 > cnt)
cnt = j - i + 1;
}
}
printf("%d\n",cnt);
}
return 0;
}