Skip to content

Commit bd3569e

Browse files
authored
Merge pull request #1650 from AlgorithmWithGod/Ukj0ng
[20251212] BOJ / G3 / 두 배열의 합 / 한종욱
2 parents 8efc615 + 2d69fd0 commit bd3569e

File tree

1 file changed

+102
-0
lines changed

1 file changed

+102
-0
lines changed
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
```
2+
import java.io.*;
3+
import java.util.*;
4+
5+
public class Main {
6+
private static final BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
7+
private static final BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
8+
private static int[] A, B;
9+
private static List<Long> sumA, sumB;
10+
private static int T, n, m;
11+
12+
public static void main(String[] args) throws IOException {
13+
init();
14+
long answer = 0;
15+
16+
for (int i = 0; i < sumA.size(); i++) {
17+
int left = lowerBound(sumA.get(i));
18+
int right = upperBound(sumA.get(i));
19+
20+
answer += right-left;
21+
}
22+
23+
bw.write(answer + "\n");
24+
bw.flush();
25+
bw.close();
26+
br.close();
27+
}
28+
29+
private static void init() throws IOException {
30+
T = Integer.parseInt(br.readLine());
31+
n = Integer.parseInt(br.readLine());
32+
A = new int[n];
33+
StringTokenizer st = new StringTokenizer(br.readLine());
34+
for (int i = 0; i < n; i++) {
35+
A[i] = Integer.parseInt(st.nextToken());
36+
}
37+
38+
m = Integer.parseInt(br.readLine());
39+
B = new int[m];
40+
st = new StringTokenizer(br.readLine());
41+
for (int i = 0; i < m; i++) {
42+
B[i] = Integer.parseInt(st.nextToken());
43+
}
44+
45+
sumA = new ArrayList<>();
46+
for (int i = 0; i < n; i++) {
47+
long sum = 0;
48+
49+
for (int j = i; j < n; j++) {
50+
sum += A[j];
51+
sumA.add(sum);
52+
}
53+
}
54+
55+
sumB = new ArrayList<>();
56+
for (int i = 0; i < m; i++) {
57+
long sum = 0;
58+
59+
for (int j = i; j < m; j++) {
60+
sum += B[j];
61+
sumB.add(sum);
62+
}
63+
}
64+
65+
sumB.sort((o1, o2) -> Long.compare(o1, o2));
66+
}
67+
68+
private static int lowerBound(long a) {
69+
int left = 0;
70+
int right = sumB.size();
71+
72+
while (left < right) {
73+
int mid = left + (right - left)/2;
74+
75+
if (sumB.get(mid)+a >= T) {
76+
right = mid;
77+
} else {
78+
left = mid+1;
79+
}
80+
}
81+
82+
return right;
83+
}
84+
85+
private static int upperBound(long a) {
86+
int left = 0;
87+
int right = sumB.size();
88+
89+
while (left < right) {
90+
int mid = left + (right - left)/2;
91+
92+
if (sumB.get(mid)+a > T) {
93+
right = mid;
94+
} else {
95+
left = mid+1;
96+
}
97+
}
98+
99+
return right;
100+
}
101+
}
102+
```

0 commit comments

Comments
 (0)