poj2785 4 Values whose Sum is 0

来源:互联网 发布:手机保密软件 编辑:程序博客网 时间:2024/05/21 17:30
原题链接:poj2785 4 Values whose Sum is 0

题意:给出元素都为n的4个数组A,B,C,D,要从每个数组中各取一个数,求这四个数和为0的次数,一个数列有多个相同数字时,当作不同数字看待

//思路先枚举C,D的和排序,再枚举A,B的和在C,D和中进行折半查找C+D=-(A+B)的部分 #include <cstdio>#include <algorithm>using namespace std;const int MAX_N = 4000 + 5;//输入 int n;int A[MAX_N], B[MAX_N], C[MAX_N], D[MAX_N];int CD[MAX_N * MAX_N]; //存C、D中的所有和 int main(){int n, i, j;scanf("%d", &n);for(i = 0;i < n;i ++)scanf("%d%d%d%d", &A[i], &B[i], &C[i], &D[i]); for(i = 0;i < n;i ++){//枚举C、D的和存入CD中 for(j = 0;j < n;j ++)CD[i * n + j] = C[i] + D[j];}sort(CD, CD + n * n);//对和排序 long long res = 0;for(i = 0;i < n;i ++){for(j = 0;j < n;j ++){int cd = -(A[i] + B[j]);//取出C和D中和为cd的部分(CD中>cd的第一个位置与>=cd的第一个位置相减) res += upper_bound(CD, CD + n * n, cd) - lower_bound(CD, CD + n * n, cd);}}printf("%lld\n", res);return 0;}


0 0
原创粉丝点击