POJ2785 4 Values whose Sum is 0

4 Values whose Sum is 0

https://ac.nowcoder.com/acm/problem/107382

题目:给你四列数字,每列数字中都选一个数字形成一组数,找出有多少组数字相加为0
思路:二分查找
将两列的数字的和存到一个数组中
再看下两列数字的和是否存在上两列数字的相反数(即相加等于0)
利用二分查找从而达到目的
AC代码:

#include <iostream>
#include <algorithm>
using namespace std;
int a[4010]={0},b[4010];
int sum[16000010];
int c[4010],d[4010];
int main()
{
    int n;
    cin>>n;
    for(int i=0;i<n;i++){
        cin>>a[i]>>b[i]>>c[i]>>d[i];
    }
    int k=0;
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            sum[k++]=a[i]+b[j];//存储前两列的和
        }
    }
    sort(sum,sum+k);//先排序
    long long ans=0;
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
        int  x=-(c[i]+d[j]);//看后两列的相反数是否在前两列中
        ans+=upper_bound(sum,sum+k,x)-lower_bound(sum,sum+k,x);//找到第一个出现数字的下标与最后一个相同出现数字的下标+1的差便能找出该数字对应多少个前两列的和
        }
    }
    cout<<ans;
    return 0;
}
全部评论

相关推荐

07-18 14:03
门头沟学院 Java
点赞 评论 收藏
分享
点赞 评论 收藏
分享
06-28 22:48
已编辑
广东金融学院 Java
小浪_Coding:学院本+这俩项目不是buff叠满了嘛
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务