[백준 1269번] 대칭 차집합

2017. 8. 23. 22:58알고리즘/백준

반응형





소스코드


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>
using namespace std;
 
int na, nb, a[200001], b[200001], tmp[200001], r=0;
 
void merge(int arr[], int start, int mid, int end) {
    int lidx = start, tmpidx = 0, ridx = mid + 1;
 
    while (lidx <= mid&&ridx <= end) {
        if (arr[lidx] < arr[ridx])
            tmp[tmpidx] = arr[lidx++];
        else
            tmp[tmpidx] = arr[ridx++];
        tmpidx++;
    }
 
    while (lidx <= mid)
        tmp[tmpidx++= arr[lidx++];
    while (ridx <= end)
        tmp[tmpidx++= arr[ridx++];
 
    tmpidx = 0;
    for (int i = start; i <= end; i++)
        arr[i] = tmp[tmpidx++];
}
 
void merge_sort(int arr[], int start, int end) {
    if (start == end)
        return;
    int mid = (start + end/ 2;
    merge_sort(arr, start, mid);
    merge_sort(arr, mid + 1end);
    merge(arr, start, mid, end);
}
 
int main() {
    ios::sync_with_stdio(false);
    cin >> na >> nb;
    for (int i = 0; i < na; i++)
        cin >> a[i];
    for (int i = 0; i < nb; i++)
        cin >> b[i];
    merge_sort(a, 0, na - 1);
    merge_sort(b, 0, nb - 1);
 
    int aidx=0, bidx=0;
    while (aidx < na && bidx < nb) {
        if (a[aidx] == b[bidx])
            r++,aidx++,bidx++;
        else if (a[aidx] < b[bidx])
            aidx++;
        else if (a[aidx] > b[bidx])
            bidx++;
    }
    cout << (na-r) + (nb-r) << '\n';
    return 0;
}
cs


반응형

'알고리즘 > 백준' 카테고리의 다른 글

[백준 9440번] 숫자 더하기  (0) 2017.08.30
[백준 4963번] 섬의 개수  (0) 2017.08.27
[백준 1068번] 트리  (1) 2017.08.21
[백준 2688번] 줄어들지 않아  (0) 2017.08.21
[백준 1890번] 점프  (0) 2017.08.15