题目链接<==戳这
思路:先从小到大排序,再暴力循环枚举每一个元素作为最小值的情况时完美数列的最大长度。取最大即可。
直接上代码:
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
typedef long long ll;
const int maxn=1e5+5;
ll a[maxn];
int main(){
ll n,p;
cin>>n>>p;
for(int i=1;i<=n;i++){
cin>>a[i];
}
sort(a+1,a+1+n);
ll temp; ==>暂时记录每一个 “ m*p ”
int ans=0; ==>最大长度
for(int i=1;i<=n;i++){
temp=a[i]*p;
for(int j=i+ans;j<=n;j++){ ==>j从i+ans开始枚举,防止超时
if(a[j]>temp){
break;
}else {
ans=max(ans,j-i+1);
}
}
}
cout<<ans;
}