给定一个正整数数列,和正整数p,设这个数列中的最大值是M,最小值是m,如果M <= m * p,则称这个数列是完美数列。
现在给定参数p和一些正整数,请你从中选择尽可能多的数构成一个完美数列。
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main() {
int n;
long long p;
cin >> n >> p;
vector<int> vec(n);
for (int i = 0;i < n;++i)
cin >> vec[i];
if (n == 1) {
cout << 1 << endl;
return 0;
}
sort(vec.begin(), vec.end());
int j;
int count = 0;
for (int i = 0;i < n;++i) {
long long max = vec[i] * p;
for (j = i + count;j < n;++j) {
if (vec[j] > max) break;
++count;
}
if (j == n) break;
}
cout << count;
return 0;
}
- 已经遍历到最后说明已经出现最大值
- 起始位置向后移动1位,从上次中断的地方继续遍历
- 距离不要重新计数
- 只有1个的特殊情况