⬆︎
×

[PAT-A] 1085 Perfect Sequence

Hyplus目录

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;
}

发表评论