给定一个正整数数列,和正整数 p,设这个数列中的最大值是 M,最小值是 m,如果 M≤mp,则称这个数列是完美数列。
现在给定参数 p 和一些正整数,请你从中选择尽可能多的数构成一个完美数列。
输入格式:
输入第一行给出两个正整数 N 和 p,其中 N(≤10^5)是输入的正整数的个数,p(≤10^9)是给定的参数。第二行给出 N 个正整数,每个数不超过 109。
输出格式:
在一行中输出最多可以选择多少个数可以用它们组成一个完美数列。
输入样例:
10 8
2 3 20 4 5 1 6 7 8 9
输出样例:
8
思路:主要找符合条件的最大区间长度......
1 #include<stdio.h>
2 #include<math.h>
3 #include<stdlib.h>
4 #include<string.h>
5 int cmp(const void *x,const void *y)
6 {
7 return *(long long int *)x-*(long long int *)y;
8 }
9 int main()
10 {
11 long long int n,p;
12 scanf("%lld%lld",&n,&p);
13 long long int num[100001];
14 for(int i=0;i<n;i++)
15 scanf("%lld",&num[i]);
16 qsort(num,n,sizeof(long long int),cmp);
17 int max=-1;
18 for(int i=0;i<n;i++)
19 {
20 for(int j=i+max;j<n;j++)
21 {
22 if(num[i]*p>=num[j])
23 {
24 if((j-i+1)>max)
25 max=j-i+1;
26 }
27 else
28 break;
29 }
30 }
31 printf("%d
",max);
32 return 0;
33 }