题面
给定一个正整数数列,和正整数 p,设这个数列中的最大值是 M,最小值是 m,如果 M≤mp,则称这个数列是完美数列。
现在给定参数 p 和一些正整数,请你从中选择尽可能多的数构成一个完美数列
输入
输入第一行给出两个正整数 N 和 p,其中 N(≤105)是输入的正整数的个数,p(≤109)是给定的参数。第二行给出 N 个正整数,每个数不超过 10^9。
输出
在一行中输出最多可以选择多少个数可以用它们组成一个完美数列。
样例输入
1 2
| 10 8 2 3 20 4 5 1 6 7 8 9
|
样例输出
提示
无
思路
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| typedef long long LL; const int mxn = 1e5 + 5; LL a[mxn];
int main() { int n, p; scanf("%d %d", &n, &p);
for(int i=0; i<n; i++) scanf("%lld", &a[i]); sort(a, a+n);
int ans = 1; for(int i=0; i<n; i++) { int count = ans - 1; for(int j=i+count; j<n; j++) { if(a[j] <= p*a[i]) count++; else break; } ans = max(ans, count);
if(i+count > n) break; } printf("%d\n", ans); return 0; }
|