码迷,mamicode.com
首页 > 其他好文 > 详细

UVa 1152 (中途相遇法) 4 Values whose Sum is 0

时间:2015-02-04 20:12:31      阅读:106      评论:0      收藏:0      [点我收藏+]

标签:

题意:

要从四个数组中各选一个数,使得这四个数之和为0,求合法的方案数。

分析:

首先枚举A+B所有可能的值,排序。

然后枚举所有-C-D的值在其中用二分法查找。

技术分享
 1 #include <cstdio>
 2 #include <algorithm>
 3 using namespace std;
 4 
 5 const int maxn = 4000 + 10;
 6 int A[maxn], B[maxn], C[maxn], D[maxn], sum[maxn*maxn], cnt;
 7 
 8 int main()
 9 {
10     //freopen("in.txt", "r", stdin);
11 
12     int T;
13     scanf("%d", &T);
14     while(T--)
15     {
16         int n;
17         scanf("%d", &n);
18         for(int i = 0; i < n; ++i) scanf("%d%d%d%d", &A[i], &B[i], &C[i], &D[i]);
19         cnt = 0;
20         for(int i = 0; i < n; ++i)
21             for(int j = 0; j < n; ++j)
22                 sum[cnt++] = A[i] + B[j];
23         sort(sum, sum + cnt);
24         long long ans = 0;
25         for(int i = 0; i < n; ++i)
26             for(int j = 0; j < n; ++j)
27                 ans += upper_bound(sum, sum + cnt, -C[i]-D[j]) - lower_bound(sum, sum + cnt, -C[i]-D[j]);
28         printf("%lld\n", ans);
29         if(T) puts("");
30     }
31 
32     return 0;
33 }
代码君

 

UVa 1152 (中途相遇法) 4 Values whose Sum is 0

标签:

原文地址:http://www.cnblogs.com/AOQNRMGYXLMV/p/4273177.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!