Java
测试点4超时
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
static final int N = 100010;
static int n, p;
static int[] a = new int[N];
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer tokenizer = new StringTokenizer(reader.readLine());
n = Integer.parseInt(tokenizer.nextToken());
p = Integer.parseInt(tokenizer.nextToken());
tokenizer = new StringTokenizer(reader.readLine());
for (int i = 0; i < n; ++i) {
a[i] = Integer.parseInt(tokenizer.nextToken());
}
Arrays.sort(a, 0, n);
int res = 0;
for (int i = 0, j = 0; i < n; ++i) { // j: M, i: m
while ((long) a[j] * p < a[i]) j++;
res = Math.max(res, i - j + 1);
}
System.out.println(res);
reader.close();
}
}
C++
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 100010;
int n, p;
int a[N];
int main() {
cin >> n >> p;
for (int i = 0; i < n; ++i) cin >> a[i];
sort(a, a + n);
int res = 0;
for (int i = 0, j = 0; i < n; ++i) { // j: M, i: m
while ((long long) a[j] * p < a[i]) j++;
res = max(res, i - j + 1);
}
cout << res << endl;
return 0;
}