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

    题意:四个元素个数相等的A,B,C,D,问a+b+c+d=0的个数$(ain{A},bin{B},cin{C},din{D})$,$n<=10^3$

    所以

    $n^4$????

    肯定不行的啊

    用sum1处理出a+b的和

    用sum2处理出c+d的和

    然后枚举sum1,二分找sum2,求ans

    然而。。。。。WA

    原因:可能在sum2中有相同元素,然而只算了一次

    改:不用判断是否=0,求一个upper_bound和一个lower_bound,加上它们的差即可

    #include<cstdio>
    #include<algorithm>
    #include<iostream>
    using namespace std;
    int n;
    int a[4020];
    int b[4020];
    int c[4020];
    int d[4020];
    int sum1[16005000];
    int sum2[16005000];
    int len;
    int ans;
    int main()
    {
        ios::sync_with_stdio(false);
        ans=0;
        cin>>n;
        for(int i=1;i<=n;i++)
            cin>>a[i]>>b[i]>>c[i]>>d[i];
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
                sum1[++len]=a[i]+b[j];
        len=0;
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
                sum2[++len]=c[i]+d[j];
        sort(sum2+1,sum2+len+1);
        for(int i=1;i<=len;i++)
        {
            int cnt=upper_bound(sum2+1,sum2+len+1,-sum1[i])-sum2;
            int pos=lower_bound(sum2+1,sum2+len+1,-sum1[i])-sum2;
            ans=ans+cnt-pos;
        } 
        cout<<ans<<endl;
    }
  • 相关阅读:
    python D5
    python D4
    python D3
    python D2
    python D1
    day12——闭包,装饰器,迭代器
    day11——考试python2和python3的区别
    day10——动态参数,名称空间,global,nonlocal
    day9——函数初识
    day8——文件操作
  • 原文地址:https://www.cnblogs.com/olinr/p/9432130.html
Copyright © 2011-2022 走看看