-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[Gold III] Title: 두 배열의 합, Time: 120 ms, Memory: 8152 KB -BaekjoonHub
- Loading branch information
Showing
2 changed files
with
87 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
# [Gold III] 두 배열의 합 - 2143 | ||
|
||
[문제 링크](https://www.acmicpc.net/problem/2143) | ||
|
||
### 성능 요약 | ||
|
||
메모리: 8152 KB, 시간: 120 ms | ||
|
||
### 분류 | ||
|
||
이분 탐색, 자료 구조, 누적 합 | ||
|
||
### 제출 일자 | ||
|
||
2024년 3월 9일 14:41:31 | ||
|
||
### 문제 설명 | ||
|
||
<p>한 배열 A[1], A[2], …, A[n]에 대해서, 부 배열은 A[i], A[i+1], …, A[j-1], A[j] (단, 1 ≤ i ≤ j ≤ n)을 말한다. 이러한 부 배열의 합은 A[i]+…+A[j]를 의미한다. 각 원소가 정수인 두 배열 A[1], …, A[n]과 B[1], …, B[m]이 주어졌을 때, A의 부 배열의 합에 B의 부 배열의 합을 더해서 T가 되는 모든 부 배열 쌍의 개수를 구하는 프로그램을 작성하시오.</p> | ||
|
||
<p>예를 들어 A = {1, 3, 1, 2}, B = {1, 3, 2}, T=5인 경우, 부 배열 쌍의 개수는 다음의 7가지 경우가 있다.</p> | ||
|
||
<pre>T(=5) = A[1] + B[1] + B[2] | ||
= A[1] + A[2] + B[1] | ||
= A[2] + B[3] | ||
= A[2] + A[3] + B[1] | ||
= A[3] + B[1] + B[2] | ||
= A[3] + A[4] + B[3] | ||
= A[4] + B[2] </pre> | ||
|
||
### 입력 | ||
|
||
<p>첫째 줄에 T(-1,000,000,000 ≤ T ≤ 1,000,000,000)가 주어진다. 다음 줄에는 n(1 ≤ n ≤ 1,000)이 주어지고, 그 다음 줄에 n개의 정수로 A[1], …, A[n]이 주어진다. 다음 줄에는 m(1 ≤ m ≤ 1,000)이 주어지고, 그 다음 줄에 m개의 정수로 B[1], …, B[m]이 주어진다. 각각의 배열 원소는 절댓값이 1,000,000을 넘지 않는 정수이다.</p> | ||
|
||
### 출력 | ||
|
||
<p>첫째 줄에 답을 출력한다. 가능한 경우가 한 가지도 없을 경우에는 0을 출력한다.</p> | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
#include <iostream> | ||
#include <algorithm> | ||
#include <vector> | ||
#include <unordered_map> | ||
using namespace std; | ||
|
||
int main() | ||
{ | ||
ios_base::sync_with_stdio(0); | ||
cin.tie(0); | ||
//freopen("input.txt", "r", stdin); | ||
int t, n, m; | ||
|
||
cin >> t >> n; | ||
vector<int> a(n,0); | ||
for (int i = 0; i < n; i++) { | ||
cin >> a[i]; | ||
} | ||
cin >> m; | ||
vector<int> b(m,0); | ||
for (int i = 0; i < m; i++) { | ||
cin >> b[i]; | ||
} | ||
|
||
for(int i = 0; i < n; i++) { | ||
int s = a[i]; | ||
for (int j = i + 1; j < n; j++) { | ||
s += a[j]; | ||
a.push_back(s); | ||
} | ||
} | ||
for(int i = 0; i < m; i++) { | ||
int s = b[i]; | ||
for (int j = i + 1; j < m; j++) { | ||
s += b[j]; | ||
b.push_back(s); | ||
} | ||
} | ||
|
||
long long res = 0; | ||
sort(b.begin(), b.end()); | ||
for(int i = 0; i < a.size(); i++){ | ||
int idx = lower_bound(b.begin(),b.end(),t - a[i]) - b.begin(); | ||
int endIdx = upper_bound(b.begin(),b.end(),t - a[i]) - b.begin(); | ||
res += endIdx - idx; | ||
} | ||
cout << res; | ||
return 0; | ||
} |