二分入门
来源:互联网 发布:淘宝优惠券群怎么弄 编辑:程序博客网 时间:2024/05/18 09:20
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 -4626 -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
题意:给四组数,从每组中选一个数,使得四数之和等于零,问共有几种选法。
思路:先算出两次两组数的和,再用二分法查找满足条件的数
#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>using namespace std;const int maxn = 4005;int a[maxn], b[maxn], c[maxn], d[maxn], sum_1[maxn * maxn], sum_2[maxn * maxn];int n;int main(){scanf("%d", &n);for(int i = 0; i < n; i++){scanf("%d%d%d%d", &a[i], &b[i], &c[i], &d[i]);}int k = 0, mid, ans;for(int i = 0; i < n; i++){for(int j = 0; j < n; j++){sum_1[k] = a[i] + b[j];sum_2[k++] = c[i] + d[j];}}sort(sum_2, sum_2 + k);ans = 0;for(int i = 0; i < k; i++){int l = 0, r = k - 1;while(l <= r){ mid=(l + r) / 2;if(sum_1[i] + sum_2[mid] == 0){ans++;for(int j = mid + 1; j < k; j++)//判断该数右边有没有与之相等的数{if(sum_1[i]+sum_2[j]!=0)break;elseans++;}for(int j = mid - 1; j >= 0; j--)//判断该数右边有没有与之相等的数{if(sum_1[i]+sum_2[j]!=0)break;elseans++;}break;}if(sum_1[i]+sum_2[mid]<0)l = mid + 1;elser = mid - 1;}}printf("%d\n", ans);return 0;}
阅读全文
1 0
- 二分入门
- 二分匹配(入门)
- 二分入门题
- 二分搜索入门
- 二分图入门
- 整体二分入门
- 二分图匹配入门
- poj1274二分匹配入门
- 二分查找入门
- 二分查找(入门)
- 二分基础入门
- 二分图最大匹配入门
- 二分图最佳匹配 入门
- 入门基础之二分查找
- POJ3692 二分图匹配【入门】
- HDU2063二分图匹配入门
- 算法入门1:二分查找
- 二分入门--二分知识 及 几种情况
- Quartz教程七--TriggerListener和JobListener
- 十大 IDEA 超常用快捷分享(转)
- Windows编程第二课。编程语言和Windows的关系笔记
- failed to resolve: com.android.support:appcompat-v7:25.4.0
- 《Linux内核设计与实现》读书笔记(十五)- 进程地址空间(kernel 2.6.32.60)
- 二分入门
- 驱动入门——Makefile分析
- 网络编程之FTP文件传输协议
- Groovy 在Java 8下的一些兼容性特性
- Quartz教程八--SchedulerListener
- Begin To Do
- 《Linux内核设计与实现》读书笔记(十六)- 页高速缓存和页回写
- 简单字符串分割----开宝藏
- 中英文维基百科语料上的Word2Vec实验