#include #include #include #include using namespace std; constexpr size_t MAX_N = 4005; long long numbers_amount, numbers[4][MAX_N]; vector sums[2]; unordered_map sum_to_amount[2]; template void log_vector(vector 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; }