-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathABCDEF.cpp
executable file
·134 lines (112 loc) · 2.29 KB
/
ABCDEF.cpp
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#include<bits/stdc++.h>
#define endl '\n'
using namespace std;
int L[1000000], R[1000000], cntL[1000000], cntR[1000000];
void print(int arr[], int len)
{
for(int i = 0; i < len; i++)
{
cout << arr[i] << " ";
}
cout << endl;
}
int generate_left(int arr[], int N)
{
int sizeL = 0;
for(int i = 0; i < N; i++)
{
for(int j = 0; j < N; j++)
{
for(int k = 0; k < N; k++)
{
L[sizeL] = (arr[i] * arr[j]) + arr[k];
sizeL++;
}
}
}
return sizeL;
}
int generate_rigth(int arr[], int N)
{
int sizeR = 0;
for(int i = 0; i < N; i++)
{
if(arr[i] == 0)
continue;
for(int j = 0; j < N; j++)
{
for(int k = 0; k < N; k++)
{
R[sizeR] = arr[i] * (arr[j] + arr[k]);
sizeR++;
}
}
}
return sizeR;
}
int get_pos(int L[], int cntL[], int sizeL)
{
int pos = 1;
cntL[0] = 1;
for(int i = 1; i < sizeL; i++)
{
if(L[i] != L[pos - 1])
{
L[pos] = L[i];
cntL[pos] = 1;
pos++;
}
else
cntL[pos - 1]++;
}
return pos;
}
long long get_answer(int pos1, int pos2)
{
long long ans = 0;
for(int i = 0, j = 0; i < pos1 && j < pos2; )
{
if(R[j] == L[i])
ans += (long long)cntL[i] * cntR[j];
if(L[i] < R[j])
i++;
else if(L[i] > R[j])
j++;
else
{
i++;
j++;
}
}
return ans;
}
long long get_solution(int arr[], int N)
{
int sizeL = generate_left(arr, N);
int sizeR = generate_rigth(arr, N);
sort(L, L + sizeL);
sort(R, R + sizeR);
// cout << "arrays L y R" << endl;
// print(L, sizeL);
// print(R, sizeR);
int pos1 = get_pos(L, cntL, sizeL);
int pos2 = get_pos(R, cntR, sizeR);
// cout << "arrays cntL y cntR" << endl;
// print(cntL, sizeL);
// print(cntR, sizeR);
long long ans = get_answer(pos1, pos2);
return ans;
}
int main()
{
int N, x;
cin >> N;
int arr[N];
for(int i = 0; i < N; i++)
{
cin >> x;
arr[i] = x;
}
int ans = get_solution(arr, N);
cout << ans << endl;
}