1
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
#include <unordered_map>
|
||||
#include <algorithm>
|
||||
|
||||
using namespace std;
|
||||
|
||||
constexpr size_t MAX_N = 4005;
|
||||
long long numbers_amount, numbers[4][MAX_N];
|
||||
vector<long long> sums[2];
|
||||
unordered_map<long long, size_t> sum_to_amount[2];
|
||||
|
||||
template <typename T>
|
||||
void log_vector(vector<T> vec, const string& prefix = "") {
|
||||
clog << prefix;
|
||||
for (const T& n : vec) {
|
||||
clog << n << " ";
|
||||
}
|
||||
clog << endl;
|
||||
}
|
||||
|
||||
void build_sums(const size_t sums_idx) {
|
||||
for (int i = 0; i < numbers_amount; i++) {
|
||||
for (int j = 0; j < numbers_amount; j++) {
|
||||
long long sum = numbers[sums_idx][i] + numbers[sums_idx + 1][j];
|
||||
if (!sum_to_amount[sums_idx / 2][sum]++) {
|
||||
sums[sums_idx / 2].push_back(sum);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int main() {
|
||||
ios::sync_with_stdio(false);
|
||||
cin.tie(nullptr);
|
||||
|
||||
cin >> numbers_amount;
|
||||
for (int i = 0; i < numbers_amount; i++) {
|
||||
cin >> numbers[0][i] >> numbers[1][i] >> numbers[2][i] >> numbers[3][i];
|
||||
}
|
||||
build_sums(0), build_sums(2);
|
||||
sort(sums[0].begin(), sums[0].end()), sort(sums[1].begin(), sums[1].end());
|
||||
// log_vector(sums[0], "sums[0]: ");
|
||||
// log_vector(sums[1], "sums[1]: ");
|
||||
|
||||
unsigned int ans = 0;
|
||||
for (const long long n : sums[0]) {
|
||||
auto it = lower_bound(sums[1].begin(), sums[1].end(), -n);
|
||||
if (it != sums[1].end() && *it == -n) {
|
||||
ans += sum_to_amount[1][-n] * sum_to_amount[0][n];
|
||||
}
|
||||
}
|
||||
cout << ans << endl;
|
||||
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user