#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main(){
long int N, p, cnt=0, maxcnt=0, i, j;
cin >> N >> p;
vector<long> v(N);
for(int i=0;i<N;i++) cin>>v[i];
sort(v.begin(), v.end());
// how to count?count when everycompare
for(i = 0; i < N; i++){
if(cnt > maxcnt) maxcnt = cnt;
cnt=0;
for(j = i; j < N; j++){
if(v[j] > v[i] * p) break;
else cnt++;
}
}
cout << maxcnt;
return 0;
}
两个测试点没有过,一个错误,一个超时。
二次修改,丢掉maxcnt,第一次遍历后记录cnt,第二次 i++后,j 的位置从 i+cnt 开始,判断条件如果成立,说明新增加一个数,cnt++;
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main(){
long int N, p, cnt=0;
cin >> N >> p;
vector<int> v(N);
for(int i=0;i<N;i++) cin>>v[i];
sort(v.begin(), v.end());
for(int i = 0; i < N; i++){
for(int j = i + cnt; j < N; j++){
if(v[j] > v[i] * p) break;
else cnt++;
}
}
cout << cnt;
return 0;
}