HDU 4334

简介: Trouble Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2961 Accepted Submission(s): 893 Problem Description Hassan is in trouble.

Trouble

Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 2961 Accepted Submission(s): 893


Problem Description
Hassan is in trouble. His mathematics teacher has given him a very difficult problem called 5-sum. Please help him.
The 5-sum problem is defined as follows: Given 5 sets S_1,...,S_5 of n integer numbers each, is there a_1 in S_1,...,a_5 in S_5 such that a_1+...+a_5=0?
 

 

Input
First line of input contains a single integer N (1≤N≤50). N test-cases follow. First line of each test-case contains a single integer n (1<=n<=200). 5 lines follow each containing n integer numbers in range [-10^15, 1 0^15]. I-th line denotes set S_i for 1<=i<=5.
 

 

Output
For each test-case output "Yes" (without quotes) if there are a_1 in S_1,...,a_5 in S_5 such that a_1+...+a_5=0, otherwise output "No".
 

 

Sample Input
2 2 1 -1 1 -1 1 -1 1 -1 1 -1 3 1 2 3 -1 -2 -3 4 5 6 -1 3 2 -4 -10 -1
 

 

Sample Output
No Yes
 1 //大致题意:判断五个数之和是否可能为0 
 2 #include <iostream>
 3 #include <cstring>
 4 #include <algorithm>
 5 using namespace std;
 6 
 7 typedef __int64 LL;//用define时出了错误 
 8 LL a[210];
 9 LL b[210];
10 LL c[210];
11 LL f[202*202];
12 LL g[202*202];
13 int num;
14 
15 int main()
16 {
17     int i,j,k,T;
18     cin>>T;
19     while(T --)
20     {
21         cin>>num;
22         //memset(f, 0, sizeof f);
23         //memset(g, 0, sizeof g);
24         int cnt1 = 0;
25         int cnt2 = 0;
26         for(i = 0; i < num; i ++) 
27           cin>>a[i];
28         for(i = 0; i < num; i ++) 
29           cin>>b[i];
30         for(i = 0; i < num; i ++)
31             for(j = 0; j < num; j ++)
32                 f[cnt1++] = a[i] + b[j];
33         for(i = 0; i < num; i ++) 
34           cin>>a[i];
35         for(i = 0; i < num; i ++) 
36           cin>>b[i];
37         for(i = 0; i < num; i ++)
38             for(j = 0; j < num; j ++)
39                 g[cnt2++] = a[i] + b[j];
40         for(i = 0; i < num; i ++) 
41           cin>>c[i];
42         sort(f, f + cnt1);
43         sort(g, g + cnt2);
44         sort(c, c + num);
45         bool flag = 0;
46         for(i = 0; i < num; i ++)
47         {
48             LL temp = c[i];
49             j = 0;
50             k = cnt2 - 1;
51             while(j < cnt1 && k >= 0)
52             {
53                 if(f[j] + g[k] == (-temp))
54                 {
55                     flag = 1;
56                     break;
57                 }
58                 if(f[j] + g[k] <(-temp)) 
59                     j++;
60                 else 
61                     k--;
62             }
63         }
64         if(flag)
65           cout<<"Yes"<<endl;
66         else
67           cout<<"No"<<endl;
68     }
69     return 0;
70 }

 

目录
相关文章
|
5月前
|
Java 文件存储
hdu1128 Self Numbers
hdu1128 Self Numbers
23 0
|
C++
HDU1862
中文题,题意挺好理解,不过多赘述。
1239 0
|
机器学习/深度学习 算法
|
Java 人工智能 Windows