题目传送门
分析:首先将数列列从小到大排序,设当前结果为ans = 0,当前最⻓度为t = 0;从i = 0~n,j从i + ans到n(因为是为了找最大的ans,所以下一次j只要从i的ans个后面开始找就行了)每次计算t与ans最大值,最后输出ans。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
int n;
long long int p;
cin >> n >> p;
vector<int> v(n);
for (int i = 0; i < n; i++)
{
cin >> v[i];
}
sort(v.begin(), v.end());
int ans = 0, t = 0;
for (int i = 0; i < n; i++)
{
for (int j = i + ans; j < n; j++)
{
if (v[j] <= v[i] * p)
{
t = j - i + 1;
ans = max(t, ans);
}
else
{
break;
}
}
}
cout << ans << endl;
return 0;
}
/*
10 8
2 3 20 4 5 1 6 7 8 9
*/