⬆︎
×

[PAT-A] 1037 Magic Coupon

Hyplus目录

Java

测试点4超时

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.Arrays;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        int sum = 0;

        int n1 = Integer.parseInt(reader.readLine().trim());
        int[] num1 = new int[n1];
        String[] num1Str = reader.readLine().trim().split("\\s+");
        for (int i = 0; i < n1; i++) {
            num1[i] = Integer.parseInt(num1Str[i]);
        }

        int n2 = Integer.parseInt(reader.readLine().trim());
        int[] num2 = new int[n2];
        String[] num2Str = reader.readLine().trim().split("\\s+");
        for (int i = 0; i < n2; i++) {
            num2[i] = Integer.parseInt(num2Str[i]);
        }

        Arrays.sort(num1);
        Arrays.sort(num2);

        for (int i = 0; i < n1 && i < n2 && num1[i] < 0 && num2[i] < 0; i++) {
            sum += num1[i] * num2[i];
        }

        for (int i = n1 - 1, j = n2 - 1; i >= 0 && j >= 0 && num1[i] > 0 && num2[j] > 0; i--, j--) {
            sum += num1[i] * num2[j];
        }

        System.out.print(sum);
    }
}

C++

#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>

using namespace std;

const int N = 10010;

int n, m;
vector<int> c_p, c_n, p_p, p_n;

int main() {
    cin >> n;
    while (n--) {
        int x;
        cin >> x;
        if (x > 0) c_p.push_back(x);
        else if (x < 0) c_n.push_back(x);
    }

    cin >> m;
    while (m--) {
        int x;
        cin >> x;
        if (x > 0) p_p.push_back(x);
        else if (x < 0) p_n.push_back(x);
    }

    sort(c_p.begin(), c_p.end(), greater<int>());
    sort(c_n.begin(), c_n.end());
    sort(p_p.begin(), p_p.end(), greater<int>());
    sort(p_n.begin(), p_n.end());

    int sum = 0;
    for (int i = 0; i < c_p.size() && i < p_p.size(); ++i)
        sum += c_p[i] * p_p[i];
    for (int i = 0; i < c_n.size() && i < p_n.size(); ++i)
        sum += c_n[i] * p_n[i];
    cout << sum << endl;

    return 0;
}

发表评论