
广义two pointers:
1.序列有序
2.两个指针i,j对序列进行扫描,以较低复杂度解决问题。
Notice
思路:
先对该数列从小到大进行排序(sort()),再从排序后的最小值(即a[0])开始作为m,
将之后的数值依次作为M,看是否满足条件( M≤mp),若满足则记录此时的最大值
cnt (cnt 为 j - i + 1;).依次记录下去,找出最大的cnt最后输出。
#include <iostream>
#include <algorithm>
using namespace std;
int main(){
long long n,p;
int cnt = 0;
cin >> n >> p;
int a[n];
for(int i = 0;i < n;i++){
cin >> a[i];
}
sort(a,a + n);
for(int i = 0;i < n;i++){
for(int j = i + cnt;j < n;j++){
if(p * a[i] >= a[j]){
cnt = cnt > j - i + 1 ? cnt : j - i + 1;
}else
break;
}
}
cout << cnt;
return 0;
}