1030. 完美数列(25)
题目地址:1030. 完美数列
题目描述:
给定一个正整数数列,和正整数p,设这个数列中的最大值是M,最小值是m,如果M <= m * p,则称这个数列是完美数列。
现在给定参数p和一些正整数,请你从中选择尽可能多的数构成一个完美数列。
输入格式:
输入第一行给出两个正整数N和p,其中N(<= 105)是输入的正整数的个数,p(<= 109)是给定的参数。第二行给出N个正整数,每个数不超过109。输出格式:
在一行中输出最多可以选择多少个数可以用它们组成一个完美数列。
易错点:
数字类型要设置为long long型才能通过最后一个样例。
程序:
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int N, p;
cin >> N >> p;
long long arr[N];
for (int i = 0; i < N; i++)
{
cin >> arr[i];
}
sort(arr, arr+N);
int j, k, ans = 1;
for (j = 0; j < N; j++)
{
for (k = j + ans; k < N; k++)
{
if (arr[j] * p >= arr[k])
{
ans++;
}
else
{
break;
}
}
}
cout << ans << endl;
return 0;
}