class Solution {
public:
void initMap(unordered_map<int, int>& tar, vector<int>& ori1, vector<int>& ori2){
for (int i = 0; i < ori1.size(); i++)
for (int j = 0; j < ori2.size(); j++)
tar[ori1[i] + ori2[j]]++;
}
int fourSumCount(vector<int>& A, vector<int>& B, vector<int>& C, vector<int>& D) {
unordered_map<int, int> AB, CD;
initMap(AB, A, B);
initMap(CD, C, D);
int res = 0;
for (auto kv = AB.begin(); kv != AB.end(); kv++) {
auto tmp = CD.find(-kv->first);
if (tmp != CD.end())
res += kv->second * tmp->second;
}
return res;
}
};