哈希-4 Values whose Sum is 0
来源:互联网 发布:java开发项目实例 编辑:程序博客网 时间:2024/05/22 05:28
4 Values whose Sum is 0
Time Limit: 15000MS Memory Limit: 228000K
Total Submissions: 17875 Accepted: 5255
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).
Source
Southwestern Europe 2005
哈希的一道比较简单的题,
题意:给你四个集合,从四个集合中分别选出一个元素,使四个元素的和为零,问有几种选法;
方法:先让两个集合加和,用哈希链表,储存计算的结果,有后两个集合的计算结果查找,不过直接写链表可能比较耗时,我交了一次11s多,后来换成前向星3s多.
#include <map>#include <set>#include <list>#include <cmath>#include <queue>#include <stack>#include <vector>#include <string>#include <cstdio>#include <cstring>#include <cstdlib>#include <iostream>#include <algorithm>using namespace std;#define eps 1e-9#define LL long long#define PI acos(-1.0)#define INF 0x3f3f3f3f#define CRR fclose(stdin)#define CWW fclose(stdout)#define RR freopen("input.txt","r",stdin)#define WW freopen("output.txt","w",stdout)const int MAX = 4010;const int Mod = 10000007;struct node{ int num; int data; int next;} H[Mod*10];int head[Mod];int a[MAX],b[MAX],c[MAX],d[MAX];int top;int Creat(int ans){ H[top].num=1; H[top].data=ans; return top++;}int main(){ int n; int ans; int p,q; int Max; while(~scanf("%d",&n)) { memset(head,-1,sizeof(head)); for(int i=0; i<n; i++) { scanf("%d %d %d %d",&a[i],&b[i],&c[i],&d[i]); } top=0; for(int i=0; i<n; i++) { for(int j=0; j<n; j++) { ans=a[i]+b[j]; p=abs(ans)%Mod; q=head[p]; while(q!=-1) { if(H[q].data==ans) { H[q].num++; break; } q=H[q].next; } if(q==-1) { q=Creat(ans); H[q].next=head[p]; head[p]=q; } } } Max=0; for(int i=0; i<n; i++) { for(int j=0; j<n; j++) { ans=-1*(c[i]+d[j]); p=abs(ans)%Mod; q=head[p]; while(q!=-1) { if(H[q].data==ans) { Max+=H[q].num; break; } q=H[q].next; } } } printf("%d\n",Max); } return 0;}
- 哈希-4 Values whose Sum is 0
- 4 Values whose Sum is 0 (P2785)
- 4 Values whose Sum is 0
- 4 Values whose Sum is 0
- 2785 4 Values whose Sum is 0
- 4 Values whose Sum is 0
- 1152 - 4 Values whose Sum is 0
- 1152 - 4 Values whose Sum is 0
- UVA1152-4 Values whose Sum is 0
- POJ2785 4 Values whose Sum is 0
- 4 Values whose Sum is 0
- UVa1152 - 4 Values whose Sum is 0
- POJ2785 4 Values whose Sum is 0
- UVA1152 4 Values whose Sum is 0
- 1152 - 4 Values whose Sum is 0
- E - 4 Values whose Sum is 0
- poj2785(4 Values whose Sum is 0)
- POJ2785-4 Values whose Sum is 0
- 南邮 OJ 1899 树木枝干问题I
- Leetcode_237_Delete Node in a Linked List
- Android 拍照获取源图像
- 性能优化之Java(Android)代码优化
- Java学习笔记四——接口与内部类
- 哈希-4 Values whose Sum is 0
- split 分割 字符串(分隔符如:* ^ : | , .) 及注意点
- 【leetCode】Same Tree
- 可维护性与可扩展性的区别
- Unity安卓打包
- 基于V4L2驱动程序的USB摄像头Android(JNI)的编写(二)
- 二分查找算法
- 南邮 OJ 1900 闰年
- 【Qt OpenGL教程】20:蒙板