zoukankan      html  css  js  c++  java
  • poj 2785 4 Values whose Sum is 0

    Description

    The SUM problem can be formulated as follows: given four lists A, B, C, D of integer values, compute how many quadruplet (a, b, c, d ) ∈ A x B x C x D are such that a + b + c + d = 0 . In the following, we assume that all lists have the same size n . 

    Input

    The first line of the input file contains the size of the lists n (this value can be as large as 4000). We then have n lines containing four integer values (with absolute value as large as 228 ) that belong respectively to A, B, C and D . 

    Output

    For each input file, your program has to write the number quadruplets whose sum is zero. 

    Sample Input

    6
    -45 22 42 -16
    -41 -27 56 30
    -36 53 -37 77
    -36 30 -75 -46
    26 -38 -10 62
    -32 -54 -6 45
    

    Sample Output

    5
    

    Hint

    Sample Explanation: Indeed, the sum of the five following quadruplets is zero: (-45, -27, 42, 30), (26, 30, -10, -46), (-32, 22, 56, -46),(-32, 30, -75, 77), (-32, -54, 56, 30).

    首先开一个数组枚举cd和,然后通过枚举ab和在新的数组里二分查找解

    #include <cstdio>
    #include <cmath>
    #include <cctype>
    #include <iostream>
    #include <cstring>
    #include <algorithm>
    #include <string>
    #include <stack>
    #include <vector>
    #include <map>
    #include <set>
    using namespace std;
    typedef long long LL;
    
    string s;
    LL a[4005],b[4005],c[4005],d[4005];
    LL cd[16000001] = {0};
    LL n,res = 0;
    int main() {
      // freopen("test.in","r",stdin);
      ios::sync_with_stdio(false);
      cin >> n;
      for (int i=0;i<n;i++){
        cin >> a[i] >> b[i] >> c[i] >> d[i];
      }
      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);
      for (int i=0;i<n;i++){
        for (int j=0;j<n;j++){
          LL now = a[i] + b[j];
          LL need = 0 - now;
          res += upper_bound(cd,cd+n*n,need) - lower_bound(cd,cd+n*n,need);
        }
      }
      cout << res;
      return 0;
    }
    View Code
  • 相关阅读:
    妹妹
    小猴和北极熊
    盛趣->盛大
    运维
    操之过急
    修马路
    博人传
    醉酒
    【跨域】SpringBoot跨域,拦截器中,第一次获取的请求头为NULL,发送两次请求的处理方式
    【Linux】Linux安装Tomcat
  • 原文地址:https://www.cnblogs.com/ToTOrz/p/7270291.html
Copyright © 2011-2022 走看看