zz12345의 코딩 공부

https://www.acmicpc.net/problem/2143

 

2143번: 두 배열의 합

첫째 줄에 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)이 주어지고, 그

www.acmicpc.net

 

코드

 

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
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
 
int main() {
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    
    long long t;
    int n,m;
    cin>>t;
    cin>>n;
    int a[n];
    for(int i=0;i<n;i++)
    {
        cin>>a[i];
    }
    cin>>m;
    int b[m];
    for(int i=0;i<m;i++)
    {
        cin>>b[i];
    }
    vector<int> paa;
    vector<int> pab;
    for(int i=0;i<n;i++)
    {
        paa.push_back(a[i]);
        int sum=a[i];
        for(int j=i+1;j<n;j++)
        {
            sum=sum+a[j];
            paa.push_back(sum);
        }
    }
    for(int i=0;i<m;i++)
    {
        pab.push_back(b[i]);
        int sum=b[i];
        for(int j=i+1;j<m;j++)
        {
            sum=sum+b[j];
            pab.push_back(sum);
        }
    }
    
    sort(paa.begin(),paa.end());
    sort(pab.begin(),pab.end());
    long long res=0;
    for(int i=0;i<paa.size();i++)
    {
        res+=upper_bound(pab.begin(),pab.end(),t-paa[i])-lower_bound(pab.begin(),pab.end(),t-paa[i]);
    }
    cout<<res;
    return 0;
}
cs

 

풀이

 각 a, b 배열의 모든 가능한 부 배열의 합을 27~36행, 37~46행을 통해서 paa, pab벡터에 넣어준다. 그 후에 각 벡터를 오름차순으로 정렬한 뒤 upper_bound와 lower_bound 함수를 사용하여 합이 t가 되는 부 배열 쌍의 개수를 구해준다. upper_bound와 lower_bound의 차를 이용해서 원소의 개수를 구하는 방법은 매우 유용한 거 같으니 꼭 사용할 줄 알아야 할 것 같다!

upper_bound와 lower_bound 함수의 사용법은 아래의 링크에서 확인할 수 있다.

 

https://zz12345.tistory.com/17

 

백준 10816번 : 숫자 카드 2 (C++) (upper_bound , lower_bound)

https://www.acmicpc.net/problem/10816 10816번: 숫자 카드 2 첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카..

zz12345.tistory.com

 

공유하기

facebook twitter kakaoTalk kakaostory naver band