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