首页 > 代码库 > POJ2785 4 Values whose Sum is 0(二分)
POJ2785 4 Values whose Sum is 0(二分)
题目链接:
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(二分)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。