STL的upper_bound和lower_bound很好用啊,暴力大法好。
代码:
#include<stdio.h>
#include<algorithm>
#define maxn 4010
using namespace std;
int n ;
int a[maxn],b[maxn],c[maxn],d[maxn];
int cd[maxn*maxn];
void solve(){
for(int i = 0; i<n; i++)
for(int j = 0; j<n; j++)
cd[i*n+j] = c[i]+d[j];
sort(cd, cd+n*n);
long long res = 0;
for(int i = 0; i<n; i++)
for(int j = 0; j<n; j++){
int cd1 = -(a[i]+b[j]);
res += upper_bound(cd,cd+n*n, cd1)-lower_bound(cd, cd+n*n, cd1);
}
printf("%lld\n", res);
}
int main(){
while(scanf("%d", &n)!=EOF){
for(int i = 0; i<n; i++)
scanf("%d%d%d%d", &a[i], &b[i], &c[i], &d[i]);
solve();
}
return 0;
}