POJ 2785 4 Values whose Sum is 0

简介: POJ 2785 4 Values whose Sum is 0

题目: POJ 2785 4 Values whose Sum is 0 ,哈哈,我们今天来看一道稍微简单的二分题嘛,这是选自POJ上的一道题,好了,我们一起来看看题意吧:

考虑到直接复制题目,或者截屏的方式不是很方便阅读,我就把直接题目链接放下面!

题目传送门: POJ 2785 4 Values whose Sum is 0

思路:

这道题你要是写个4重循环那可就太惨了,其实可以是2重循环的,我们计算前两列的分别两两相加的和,用b数组装,然后计算后两列的分别两两相加的和,用c数组装,我们只需要计算在c数组中有多少与b数组构成相反数,具体的直接看代码吧!

我们来看看成功AC的代码吧:

#include<iostream>
#include<algorithm>
using namespace std;
#define ios ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
typedef long long ll;
const int N=4010;
int a[N][6];
int n;
ll b[N*N],c[N*N];
ll ans;
int main(){
    ios;
    cin>>n;
    for(int i=1;i<=n;i++) cin>>a[i][1]>>a[i][2]>>a[i][3]>>a[i][4];
    ll cnt=0;
    for(int i=1;i<=n;i++)
    for(int j=1;j<=n;j++){
        b[++cnt]=a[i][1]+a[j][2];
        c[cnt]=a[i][3]+a[j][4];
    }
    sort(c+1,c+1+cnt);//记住给c数组排序
    for(int i=1;i<=cnt;i++){
        ans+=upper_bound(c+1,c+1+cnt,-b[i])-lower_bound(c+1,c+1+cnt,-b[i]);
    }
    cout<<ans<<"\n";
    return 0;
}


相关文章
|
应用服务中间件 C++ AHAS
hdu1327 Definite Values
hdu1327 Definite Values
53 0
POJ 1844 Sum
POJ 1844 Sum
106 0
HDOJ 1003 Max Sum
HDOJ 1003 Max Sum
101 0
HDOJ1003Max Sum
HDOJ1003Max Sum
83 0
|
机器学习/深度学习 Android开发 C++
LeetCode之Two Sum
LeetCode之Two Sum
122 0
面试题:sum=1+2-3+4-5...+m 公式:sum=2-m/2
sum=1+2-3+4-5...+m 公式:sum=2-m/2
805 0
|
算法 机器学习/深度学习
|
算法 索引 C++