POJ:2785-4 Values whose Sum is 0(双向搜索)
4 Values whose Sum is 0
Time Limit: 15000MS Memory Limit: 228000K
Total Submissions: 26974 Accepted: 8133
Case Time Limit: 5000MS
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).
解题心得:
- 首先要明确跑四重循环不现实,所以正确的方法就是将每一组数分为两半,然后跑双向搜索。可以先得到前两个所有的总和,然后排序,在得到另外两个数的总和,得到的总和就可以在已经排好序的答案中去二分查找这样复杂度就变成了O(n^2logn)。
#include <algorithm>
#include <stdio.h>
#include <cstring>
using namespace std;
const int maxn = 4010;
const int maxm = 2e7+100;
int a1[maxn],a2[maxn],a3[maxn],a4[maxn],n;
int sum[maxm];
void init() {
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%d%d%d%d",&a1[i],&a2[i],&a3[i],&a4[i]);
}
int get_sum() {
int T = 0;
for(int i=0;i<n;i++) {
for(int j=0;j<n;j++) {
sum[T++] = a1[i] + a2[j];
}
}
sort(sum,sum+T);
return T;
}
long long solve(int len) {
int ans = 0;
for(int i=0;i<n;i++) {
for(int j=0;j<n;j++) {
int k = a3[i] + a4[j];
k = -k;
ans += upper_bound(sum,sum+len,k) - lower_bound(sum,sum+len,k);
}
}
return ans;
}
int main() {
init();
int len = get_sum();
long long ans = solve(len);
printf("%lld\n",ans);
return 0;
}
POJ:2785-4 Values whose Sum is 0(双向搜索)的更多相关文章
- [POJ] 2785 4 Values whose Sum is 0(双向搜索)
题目地址:http://poj.org/problem?id=2785 #include<cstdio> #include<iostream> #include<stri ...
- POJ 2785 4 Values whose Sum is 0(想法题)
传送门 4 Values whose Sum is 0 Time Limit: 15000MS Memory Limit: 228000K Total Submissions: 20334 A ...
- POJ 2785 4 Values whose Sum is 0
4 Values whose Sum is 0 Time Limit: 15000MS Memory Limit: 228000K Total Submissions: 13069 Accep ...
- POJ - 2785 4 Values whose Sum is 0 二分
4 Values whose Sum is 0 Time Limit: 15000MS Memory Limit: 228000K Total Submissions: 25615 Accep ...
- POJ 2785 4 Values whose Sum is 0(折半枚举+二分)
4 Values whose Sum is 0 Time Limit: 15000MS Memory Limit: 228000K Total Submissions: 25675 Accep ...
- POJ 2785 4 Values whose Sum is 0(暴力枚举的优化策略)
题目链接: https://cn.vjudge.net/problem/POJ-2785 The SUM problem can be formulated as follows: given fou ...
- POJ 2785 4 Values whose Sum is 0(哈希表)
[题目链接] http://poj.org/problem?id=2785 [题目大意] 给出四个数组,从每个数组中选出一个数,使得四个数相加为0,求方案数 [题解] 将a+b存入哈希表,反查-c-d ...
- POJ 2785 4 Values whose Sum is 0 Hash!
http://poj.org/problem?id=2785 题目大意: 给你四个数组a,b,c,d求满足a+b+c+d=0的个数 其中a,b,c,d可能高达2^28 思路: 嗯,没错,和上次的 HD ...
- poj 2785 4 Values whose Sum is 0(折半枚举(双向搜索))
Description The SUM problem can be formulated . In the following, we assume that all lists have the ...
随机推荐
- 为什么要使用markdown?
markdown是什么? markdown是一种标记语言,它不是编程语言 为什么要使用markdown? markdown可以使用任何文本编辑器编写和查看 markdown编写的文件可以转化为html ...
- 部分易被忽视的css3属性
1.-webkit-tap-highlight-color 移动端页面点击按钮时会发现按钮上会出现一块阴影,设置-webkit-tap-highlight-color:rgba(0,0,0,0);就可 ...
- April 17 2017 Week 16 Monday
You will find that it is necessary to let things go; simply for the reason that they are heavy. 你会明白 ...
- *205. Isomorphic Strings (string & map idea)
Given two strings s and t, determine if they are isomorphic. Two strings are isomorphic if the chara ...
- jQuery获取Select选择的Text和Value[转载]
语法解释:1. $("#select_id").change(function(){//code...}); //为Select添加事件,当选择其中一项时触发2. var ch ...
- httpclient 中post请求重定向
背景:使用httpclient 的post请求进行登录,需要重定向登录,请求重定向后的地址 在httpclient中post请求不像get请求自己可以重定向,实现方式是 判断post请求返回码是否是3 ...
- python 爬poj.org的题目
主要是正则表达式不熟练,基础知识不扎实,函数也不怎么会用,下次再深入了解这3个函数吧. 主要是一个翻页的功能,其实,就是通过一个url替换一下数字,然后得到一个新的url,再找这个新的链接的信息. # ...
- 离线安装vscode vsix插件
VS代码扩展市场 通过扩展增强Visual Studio代码的强大功能 https://marketplace.visualstudio.com/vscode Visual Studio Code包含 ...
- python 下实现window 截图
首先安装PIL库,因为PIL官网没有支持python3.6的PIL库我想在3.X中实现,因此使用pip安装pillow pip install pillow 安装 安装完成后,from PIL imp ...
- 1018: Give me the answer
1018: Give me the answer 时间限制: 1 Sec 内存限制: 32 MB提交: 55 解决: 15[提交][状态][讨论版][命题人:外部导入] 题目描述 Farmer J ...