您的位置:首页 > 产品设计 > UI/UE

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

2016-01-31 19:51 645 查看
题目

#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: