일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Github
- Next
- 이분 탐색
- 트라이
- ccw 알고리즘
- router
- HTTP
- MySQL
- 게임 서버 아키텍처
- map
- DP
- html5
- PROJECT
- insomnia
- pm2
- 그래프 탐색
- string
- 그리디
- ERD
- branch
- 백준 15824번
- MongoDB
- Express.js
- trie
- Prisma
- 자바스크립트
- localstorage
- JavaScript
- 백준 1086번
- gcd(n. k) = 1
Archives
- Today
- Total
dh_0e
[PS] 두 배열의 합 / C++ (백준 2143번) 본문
누적 합과 이분 탐색으로 쉽게 풀 수 있는 문제
lower_bound, upper_bound 오랜만에 직접 구현해보다가 결국 귀찮아서 라이브러리에 있는 거 썼다..
풀이 과정
- 누적 합으로 A, B 배열의 부 배열의 합이 될 수 있는 경우의 수를 모두 vector에 저장해준다. (최대 500500 경우의 수)
- 둘 중 하나를 sort 해준다.
- upper_bound - lower_bound로 target(t - vec_a[i])이 몇 개나 있는 지 구해서 dap에 더해준다.
- dap은 int 범위를 넘을 수 있으므로 long이나 long long으로 처리해준다.
- 못 찾았을 경우 up, lo 모두 end() 저장소의 위치를 가르키므로 예외처리 안 해줘도 0을 더한다.
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
typedef long long ll;
int a[10001], b[10001];
vector<int> vec_a, vec_b;
int main()
{
int n, m, t;
scanf("%d", &t);
scanf("%d", &n);
for (int i = 0; i < n; i++)scanf("%d", &a[i]);
scanf("%d", &m);
for (int i = 0; i < m; i++)scanf("%d", &b[i]);
for (int i = 0; i < n; i++) {
int sum = 0;
for (int j = i; j < n; j++) {
sum += a[j];
vec_a.push_back(sum);
}
}
for (int i = 0; i < m; i++) {
int sum = 0;
for (int j = i; j < m; j++) {
sum += b[j];
vec_b.push_back(sum);
}
}
int a_size = vec_a.size();
sort(vec_b.begin(), vec_b.end());
ll dap = 0;
for (int i = 0; i < a_size; i++) {
int up = upper_bound(vec_b.begin(), vec_b.end(), t - vec_a[i]) - vec_b.begin();
int lo = lower_bound(vec_b.begin(), vec_b.end(), t - vec_a[i]) - vec_b.begin();
dap += up - lo;
}
printf("%lld\n", dap);
return 0;
}
'알고리즘 > Baekjoon' 카테고리의 다른 글
[PS] 너 봄에는 캡사이신이 맛있단다 / C++ (백준 15824번) (0) | 2025.04.02 |
---|---|
[PS] 박성원 / C++ (백준 1086번) (0) | 2025.03.25 |
[PS] GCD(n, k) = 1 / C++ (백준 11689번) (0) | 2025.03.14 |
[PS] 철로 / C++ (백준 13334번) (0) | 2025.03.13 |
[PS] N포커 / C++ (백준 16565번) (0) | 2025.03.10 |