1
/*
2
ID: leetcod3
3
PROG: sort3
4
LANG: C++
5
*/
6
#include <iostream>
7
#include <fstream>
8
#include <
string
>
9
#include <map>
10
#include <vector>
11
#include <
set
>
12
#include <algorithm>
13
#include <queue>
14
#include <cmath>
15
#include <list>
16
#include <cstring>
17
#include <cstdlib>
18
#include <limits>
19
#include <stack>
20
21
using
namespace
std;
22
23
ofstream fout (
"
sort3.out
"
);
24
ifstream fin (
"
sort3.in
"
);
25
26
int
N;
27
28
int
main()
29
{
30
fin >>
N;
31
vector<
int
>
input(N);
32
int
one, two, three;
33
one = two = three =
0
;
34
for
(
int
i =
0
; i < N; ++
i) {
35
fin >>
input[i];
36
if
(input[i] ==
1
) one++
;
37
else
if
(input[i] ==
2
) two++
;
38
else
three++
;
39
}
40
int
pos[
4
][
4
] = {
0
};
41
for
(
int
i =
0
; i < one; ++i) pos[
1
][input[i]]++
;
42
for
(
int
i = one; i < one+two; ++i) pos[
2
][input[i]]++
;
43
for
(
int
i = one+two; i < N; ++i) pos[
3
][input[i]]++
;
44
for
(
int
i =
1
; i <
4
; ++
i) {
45
//
for (int j = 1; j < 4; ++j) cout << pos[i][j] << " ";
46
//
cout << endl;
47
}
48
int
ans =
0
;
49
for
(
int
i =
1
; i <=
3
; ++
i) {
50
for
(
int
j = i; j <=
3
; ++
j) {
51
if
(i == j)
continue
;
52
int
tmp =
min(pos[i][j], pos[j][i]);
53
ans +=
tmp;
54
pos[i][j] -=
tmp;
55
pos[j][i] -=
tmp;
56
}
57
}
58
int
tmp =
0
;
59
//
cout << ans << endl;
60
for
(
int
i =
1
; i <=
3
; ++
i) {
61
for
(
int
j =
1
; j <=
3
; ++
j) {
62
if
(i == j)
continue
;
63
tmp +=
pos[i][j];
64
}
65
}
66
//
cout << tmp << endl;
67
ans += tmp /
3
*
2
;
68
fout << ans <<
endl;
69
70
return
0
;
71
}