有一个例子过不了,不知道为什么。。。
不可过:使用two pointers
#include<iostream>
#include<cstdio>
#include<math.h>
#include<cstring>
#include<algorithm>
#include<cctype>
using namespace std;
const int maxn=100010;
int ans[maxn];
int main(){
int n,p;
cin>>n>>p;
for(int i=0;i<n;i++){
cin>>ans[i];
}
sort(ans,ans+n);
int count=0;
for(int i=0;i<n;i++){
long long temp=ans[i]*p;
while((i+count)<n&&ans[i+count]<=temp) count++;
//high为第一个超过mp的位置
}
cout<<count;
return 0;
}
可过:使用二分法
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cctype>//里面有isdigit():数字字符返回true
#include<algorithm>
using namespace std;
int main(){
int n;
long long p;
scanf("%d %d",&n,&p);
int ans[n];
for(int i=0;i<n;i++){
scanf("%d",&ans[i]);
}
sort(ans,ans+n);
int result=0, max=0;
for(int i=0;i<n;i++){
long long temp=ans[i]*p;
for(int j=i+result;j<n;j++){
if(ans[j]<=temp){
result=j-i+1;
if(result>max){
max=result;
}
}else{
break;
}
}
}
cout<< max;
return 0;
}