标签:
题目链接:
http://poj.org/problem?id=2785
题意:
给定你四个大小为n的集合 然后又多少个四元组的和为0,分别来自这四个集合;
分析:
分成两组,得到sum1[[,sum2[],然后排下序,在sum2中二分搜索-sum1[i]记下数就可以了
代码如下:
#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> using namespace std; const int maxn = 4010; int a[4][maxn]; int sum1[maxn*maxn],sum2[maxn*maxn]; int main() { int n; while(~scanf("%d",&n)){ for(int i=0;i<n;i++){ for(int j=0;j<4;j++) scanf("%d",&a[j][i]); } int cnt1=0,cnt2=0; for(int i=0;i<n;i++){ for(int j=0;j<n;j++) sum1[cnt1++]=a[0][i]+a[1][j]; } for(int i=0;i<n;i++){ for(int j=0;j<n;j++) sum2[cnt2++]=a[2][i]+a[3][j]; } sort(sum1,sum1+cnt1); sort(sum2,sum2+cnt2); long long ans = 0; for(int i=0;i<cnt1;i++) ans+=upper_bound(sum2,sum2+cnt2,0-sum1[i])-lower_bound(sum2,sum2+cnt2,0-sum1[i]); printf("%lld\n",ans); } return 0; }
POJ2785 4 Values whose Sum is 0(二分)
标签:
原文地址:http://blog.csdn.net/bigbigship/article/details/42584905