• 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;
    }
  • 相关阅读:
    Office365激活(无需密钥,无需下载软件)
    java垃圾回收及其优化
    Kafka副本机制
    sdn的相关学习系列之一mininet的安装
    javascript day 02
    关于javaScript
    html-day06
    盒子模型
    html-day04
    html--笔记day03
  • 原文地址:https://www.cnblogs.com/olinr/p/9432130.html
Copyright © 2020-2023  润新知