Skip to content

Commit a81538b

Browse files
authored
Merge pull request #185 from AlgorithmWithGod/khj20006
[20250226] BOJ / P1 / Communism / 권혁준
2 parents 9d47882 + d13ea1c commit a81538b

File tree

1 file changed

+61
-0
lines changed

1 file changed

+61
-0
lines changed
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
```cpp
2+
3+
#include <iostream>
4+
#include <algorithm>
5+
using namespace std;
6+
using ll = long long;
7+
8+
int N;
9+
ll A[30]{}, D;
10+
11+
ll R[14348907][3]{};
12+
int S[2]{};
13+
14+
void half(int k, int s, int e) {
15+
for (int i = s; i < e; i++) {
16+
ll a = A[i];
17+
int T = S[k];
18+
int id = 0, id1 = 0, id2 = 0, id3 = 0;
19+
while (id1 < T) {
20+
ll r1 = R[id1][k] - a, r2 = R[id2][k], r3 = R[id3][k] + a, mn = min({ r1,r2,r3 });
21+
R[id++][2] = mn;
22+
if (mn == r1) id1++;
23+
else if (mn == r2) id2++;
24+
else id3++;
25+
}
26+
while (id2 < T) {
27+
ll r2 = R[id2][k], r3 = R[id3][k] + a, mn = min(r2, r3);
28+
R[id++][2] = mn;
29+
if (mn == r2) id2++;
30+
else id3++;
31+
}
32+
S[k] *= 3;
33+
while (id3 < T) R[id++][2] = R[id3++][k] + a;
34+
for (int j = 0; j < id; j++) R[j][k] = R[j][2];
35+
}
36+
}
37+
38+
int main() {
39+
cin.tie(0)->sync_with_stdio(0);
40+
41+
cin >> N;
42+
for (int i = 0; i < N; i++) cin >> A[i];
43+
cin >> D;
44+
45+
S[0] = S[1] = 1;
46+
half(0, 0, N >> 1);
47+
half(1, N >> 1, N);
48+
49+
ll ans = 0;
50+
int s = S[1] - 1, e = S[1] - 1;
51+
for (int i = 0; i < S[0]; i++) {
52+
ll a = R[i][0];
53+
while (s >= 0 && R[s][1] >= -D - a) s--;
54+
while (e >= 0 && R[e][1] > D - a) e--;
55+
ans += e - s;
56+
}
57+
cout << ans;
58+
59+
}
60+
61+
```

0 commit comments

Comments
 (0)