一、题目内容
POJ 2785 原题地址
二、题意解释
输入一个n行四列的矩阵,每一列取一个数,就是四个数,求有多少种着四个数相加和为0的情况
三、代码及注释
#include<cstdio>
#include<algorithm>
using namespace std;
int n;
const int MAX_N=4001;
int A[MAX_N],B[MAX_N],C[MAX_N],D[MAX_N],CD[MAX_N*MAX_N];
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);
int res=0;
int num;
for(int i=0; i<n; i++)
{
for(int j=0; j<n; j++)
{
num=-(A[i]+B[j]);
res+=upper_bound(CD,CD+n*n,num)-lower_bound(CD,CD+n*n,num);
}
}
printf("%d\n",res);
}
int main()
{
scanf("%d",&n);
for(int i=0; i<n; i++)
{
scanf("%d%d%d%d",&A[i],&B[i],&C[i],&D[i]);
}
solve();
return 0;
}