POJ2785——4 Values whose Sum is 0
2015-05-08 20:42
274 查看
题目链接:http://poj.org/problem?id=2785
4 Values whose Sum is 0
题目大意:给你n行4列数,让你在每一列中取一个数,然后相加,问有多少种组合(相加之和为0)?
解题思路:虽然给了15秒,但是直接暴力还是会超时的。接下来讲讲我的做法:首先将前两列任意两项相加得到数组x,再将后两列任意两项相加取反得到数组y,再将y排序,最后依次将x中的元素在y中进行二分查找,看有多少个相等的数加起来即为最终的结果。
4 Values whose Sum is 0
题目大意:给你n行4列数,让你在每一列中取一个数,然后相加,问有多少种组合(相加之和为0)?
解题思路:虽然给了15秒,但是直接暴力还是会超时的。接下来讲讲我的做法:首先将前两列任意两项相加得到数组x,再将后两列任意两项相加取反得到数组y,再将y排序,最后依次将x中的元素在y中进行二分查找,看有多少个相等的数加起来即为最终的结果。
#include<iostream> #include<cstdio> #include<algorithm> using namespace std; int a[4010][4]; int x[16000001]; int y[16000001]; int ll,ans; void bit_search(int t) { int mid,l=0,r=ll-1; while(l<r) { mid=(l+r)>>1; if(y[mid]<t) l=mid+1; else r=mid; } while(y[l]==t&&l<ll) { ans++; l++; } } int main() { int n,i,j,k,l; while(scanf("%d",&n)!=EOF) { int i,j; ans=0,ll=0; for(i=0;i<n;i++) scanf("%d%d%d%d",&a[i][0],&a[i][1],&a[i][2],&a[i][3]); for(i=0;i<n;i++) for(j=0;j<n;j++) x[ll++]=a[i][0]+a[j][1]; ll=0; for(i=0;i<n;i++) for(j=0;j<n;j++) y[ll++]=-(a[i][2]+a[j][3]); sort(y,y+ll); for(i=0;i<ll;i++) bit_search(x[i]); printf("%d\n",ans); } return 0; }
相关文章推荐
- poj 2785--4 Values whose Sum is 0(折半枚举)
- poj 2785 4 Values whose Sum is 0
- POJ 2785_4 Values whose Sum is 0
- POJ 2785 Values whose Sum is 0
- poj 2785 4 Values whose Sum is 0
- POJ 2785 4 Values whose Sum is 0
- 4 Values whose Sum is 0 POJ - 2785(二分查找)
- POJ 2785 4 Values whose Sum is 0
- POJ 2785 4 Values whose Sum is 0
- POJ 2785 4 Values whose Sum is 0(二分)
- poj 2785 4 Values whose Sum is 0(折半枚举(双向搜索))
- POJ 2785 4 Values whose Sum is 0【折半枚举】
- poj 2785 4 Values whose Sum is 0
- 4 Values whose Sum is 0 POJ - 2785(折半枚举)题解
- POJ 2785 4 Values whose Sum is 0
- POJ 2785 4 Values whose Sum is 0 hash
- poj 2785 4 Values whose Sum is 0
- 【POJ】2785 - 4 Values whose Sum is 0 折半查找
- POJ 2785 4 Values whose Sum is 0
- POJ 2785:4 Values whose Sum is 0 (双向BFS)