์๊ฐ ์ ํ | ๋ฉ๋ชจ๋ฆฌ ์ ํ | ์ ๋ต ๋น์จ |
2 ์ด | 128 MB | 36.331 % |
๋ฌธ์
ํด๊ฒฐ
key point, ์ํ, ๋์ ํฉ, ๋ถ๋ถํฉ, ์์ ํ์
-
๋ฐฐ์ด ํฌ๊ธฐ ์ ์ํ๊ธฐ. ์ฒ์์ ๋ฐฐ์ด์ ์๊ฒ ์ก์์ ๊ณ์ ์๊ฐ์ด๊ณผ๊ฐ ๋ฌ์๋ค. → 5๋ฒ ์ค
-
ํผ์๊ฐ ์ํ์ด๊ธฐ ๋๋ฌธ์ `์ผ→์ค` ๋ฐฉํฅ์ผ๋ก ๋์ ํฉ์ ๊ตฌํ๊ณ , `์ค→์ผ` ๋ฐฉํฅ์ผ๋ก๋ ๋์ ํฉ์ ๊ตฌํ๋ค. → 13, 19๋ฒ ์ค
-
๋ถ๋ถ ํฉ์ ๊ตฌํ ๋๋ j๋ฅผ `i + n - 1` ์ด์ ๊น์ง ๋ฐ๋ณตํ๋ค. → 23, 38๋ฒ ์ค
-
์ค์ sumA, sumB ๋ฐฐ์ด์ n * 2, m * 2 ํฌ๊ธฐ์ด๊ธฐ ๋๋ฌธ์ n๊ฐ ์ฉ๋ง ํ์ธํ๊ณ
-
๋ถ๋ฑํธ๊ฐ <= ๊ฐ ์๋ < ์ธ ์ด์ ๋ ํฌํจํ์ฌ i + n - 1๊น์ง ํ์ธํ๋ฉด ๊ทธ ๊ฐ์ sumA[n]์ด ๋๊ณ , i๊ฐ n๊น์ง ๋ฐ๋ณต๋๋๋์ sumA[n]์ด ๊ณ์ํด์ ๋ฐฐ์ด์ ์ถ๊ฐ๋๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
-
-
๋ถ๋ถํฉ์ ๋ค ๊ตฌํ๋ค๋ฉด ๋ง์ง๋ง์ ์ ์ฒด ์ดํฉ sumA[n], sumB[m]์ a, b๋ฐฐ์ด์ ์ถ๊ฐํ๋ค. → 33 ๋ฒ ์ค
-
3๋ฒ์์ sumA[n], sumB[m] ์ ์ ์ธํ ๋ถ๋ถํฉ์ ๊ตฌํ๊ธฐ ๋๋ฌธ์ ๋ง์ง๋ง์ ์ถ๊ฐํ๋ค.
-
-
A, B์ค ํ ์ข ๋ฅ๋ง ์ฌ์ฉํ์ฌ ํผ์๋ฅผ ํ๋งคํ ์ ์๊ฒ ๊ฐ๊ฐ ๊ณต์งํฉ 0์ a, b, ๋ฐฐ์ด์ ์ถ๊ฐํ๋ค.
-
๊ฐ๋ฅํ ๊ฐ์๋ฅผ ํค์๋ ค ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํ๋ค. → 37๋ฒ for๋ฌธ.
-
์ด ๋ถ๋ถ์ ๋ง์ ๋ฐฉ๋ฒ์ผ๋ก ํ ์ ์๋๋ฐ ์ด๋ฒ์๋ 0์กฐ๊ฐ๋ถํฐ S ์กฐ๊ฐ๊น์ง Aํผ์์ Bํผ์๋ก ๋ง๋ค ์ ์๋์ง ํ์ธํ๋ค.
-
์ฝ๋
๋ฉ๋ชจ๋ฆฌ | ์๊ฐ |
13552 KB | 180 ms |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
#include <cstdio>
#include <algorithm>
#include <vector>
using namespace std;
int sumA[3010], sumB[3010], ans; // ๋์ ํฉ
int main() {
int s, n, m;
scanf("%d%d%d", &s, &n, &m);
for (int i = 1, a; i <= n; i++) {
scanf("%d", &a);
sumA[i] = sumA[i - 1] + a;
}
for (int i = n + 1; i <= n * 2; i++) // n -> 1 -> 2 -> 3 ... ๋์ ํฉ๊ตฌํด์ค
sumA[i] = sumA[i - n] + sumA[n];
for (int i = 1, b; i <= m; i++) {
scanf("%d", &b);
sumB[i] = sumB[i - 1] + b;
}
for (int i = m + 1; i <= m * 2; i++) // n -> 1 -> 2 -> 3 ... ๋์ ํฉ๊ตฌํด์ค
sumB[i] = sumB[i - m] + sumB[m];
vector<int> a, b; // ๋์ฌ์ ์๋ ๋ถ๋ถ ํฉ - ๋์ ํฉ ํ์ฉ
for (int i = 1; i <= n; i++) {
for (int j = i; j < i + n - 1; j++) {
a.push_back(sumA[j] - sumA[i - 1]);
}
}
for (int i = 1; i <= m; i++) {
for (int j = i; j < i + m - 1; j++) {
b.push_back(sumB[j] - sumB[i - 1]);
}
}
a.push_back(sumA[n]); b.push_back(sumB[m]);
a.push_back(0); b.push_back(0);
sort(a.begin(), a.end());
sort(b.begin(), b.end());
for (int i = 0; i <= s; i++) {
auto p1 = equal_range(a.begin(), a.end(), i);
auto p2 = equal_range(b.begin(), b.end(), s - i);
ans += (p1.second - p1.first) * (p2.second - p2.first);
}
printf("%d", ans);
return 0;
}
|
cs |
'๐ฅ PS(Problem Solving) ๐ฅ > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] #1509 ํฐ๋ฆฐ๋๋กฌ ๋ถํ (0) | 2021.02.09 |
---|---|
[BOJ] #10942 ํฐ๋ฆฐ๋๋กฌ? (0) | 2021.02.09 |
[BOJ] #1208 ๋ถ๋ถ์์ด์ ํฉ 2 (0) | 2021.02.04 |
[BOJ] #12100 2048 (0) | 2020.09.18 |
[BOJ] #2143 ๋ ๋ฐฐ์ด์ ํฉ (0) | 2020.08.19 |
๋๊ธ