知识点:思维,二分
这个题是刘汝佳书上面的例题,也是白书一开始的例题,应该算是经典题,二分自然是很基础的知识,至于本题后面隐藏的思维,刘汝佳给的描述是中途相遇法,就是从两个不同的方向解决问题,最终汇集到一起,搜索里面的双向搜索就是个例子,但是我还没学,总之这个题是挺基础的思维题目
#include <bits/stdc++.h>
using namespace std;
const int N = 4005;
int a[N], b[N], c[N], d[N], e[N * N], f[N * N];
int main() {
int T;
cin >> T;
while (T--) {
int n;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> a[i] >> b[i] >> c[i] >> d[i];
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
e[i * n + j] = a[i] + b[j];
f[i * n + j] = -1 * (c[i] + d[j]);
}
}
sort(e, e + n * n);
sort(f, f + n * n);
long long ans = 0;
for (int i = 0; i < n * n; i++) {
int t1 = lower_bound(f, f + n * n, e[i]) - f;
int t2 = upper_bound(f, f + n * n, e[i]) - f;
ans += (long long) (t2 - t1);
}
cout << ans << endl;
if (T) cout << endl;
}
return 0;
}