和为0的4个值(4 Values Whose sum is Zero UVa 1152)

来源:互联网 发布:vmware上的mac补丁 编辑:程序博客网 时间:2024/06/05 16:31

题目

#define _CRT_SECURE_NO_WARNINGS  #include<iostream>  #include<algorithm>  #include<string>  #include<sstream>  #include<set>  #include<vector>  #include<stack>  #include<map>  #include<queue>  #include<cstdlib>  #include<cstdio>  #include<cstring>  #include<cmath>  using namespace std;const int maxn=4000+5;int AB[maxn*maxn],CD[maxn*maxn];int main(){int T;int A[maxn],B[maxn],C[maxn],D[maxn];scanf ("%d",&T);while(T--){int n;scanf ("%d",&n);for (int i=1;i<=n;i++){scanf ("%d %d %d %d",&A[i],&B[i],&C[i],&D[i]);}for (int i=1;i<=n;i++)for (int j=1;j<=n;j++){AB[(i-1)*n+j]=A[i]+B[j];CD[(i-1)*n+j]=C[i]+D[j];}sort(AB+1,AB+n*n+1);sort(CD+1,CD+n*n+1);long long num=0;int k1,k2;CD[0]=-999999999;for (int i=1;i<=n*n;i++){if(CD[i]==CD[i-1]){num+=(k2-k1);continue;}k1=lower_bound(AB+1,AB+n*n+1,-CD[i])-AB;k2=upper_bound(AB+1,AB+n*n+1,-CD[i])-AB;num+=(k2-k1);}printf("%lld\n",num);if(T) printf ("\n");}return 0;}


0 0
原创粉丝点击