用java写POJ2785
时间: 2023-11-27 07:52:46 浏览: 121
poj 2785 测试数据
4星 · 用户满意度95%
POJ2785是一个比较典型的双指针问题(two pointers),可以用Java语言来解决,以下是一份示例代码供参考:
```java
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] A = new int[n], B = new int[n], C = new int[n], D = new int[n];
for (int i = 0; i < n; i++) {
A[i] = sc.nextInt();
B[i] = sc.nextInt();
C[i] = sc.nextInt();
D[i] = sc.nextInt();
}
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
int sum = A[i] + B[j];
map.put(sum, map.getOrDefault(sum, 0) + 1);
}
}
int res = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
res += map.getOrDefault(-C[i] - D[j], 0);
}
}
System.out.println(res);
}
}
```
思路解析:
首先读入数据,然后使用两层循环计算A[i]+B[j]的值,并将它们出现的次数存储在一个HashMap中。接下来再次使用两层循环遍历C和D,计算-C[i]-D[j]的值,并在HashMap中查找是否存在这个值,如果存在,就将它出现的次数累加到结果中。最后输出结果即可。
时间复杂度:$O(n^2)$,空间复杂度:$O(n^2)$。
阅读全文