POJ 2785:4 Values whose Sum is 0 (双向BFS)

网友投稿 295 2022-08-30

POJ 2785:4 Values whose Sum is 0 (双向BFS)

4 Values whose Sum is 0

Time Limit: 15000MS

 

Memory Limit: 228000K

Total Submissions: 20020

 

Accepted: 5977

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 2 28 ) 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).

题意:求在四组数中各挑选一个满足a+b+c+d==0的个数。

直接使用BFS时间复杂度是O(n^4),显然会超时,我们可以把整个四组数据分成两组,然后就是对两组数据分别BFS,最终统计结果,这样便把时间复杂度降低到了O(n^2),很容易就可以过啦~

AC代码:

#include#include#include#include#define max(a,b) (a>b?a:b)using namespace std;__int64 a[4005],b[4005],c[4005],d[4005];__int64 cd[4005*4005];int main(){ int n; scanf("%d",&n); for(int i=0; i

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:营销套路为何屡禁不止,网红保险产品触动消费者哪些需求!(保险的营销模式很可怕)
下一篇:E、room (费用流)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~