二分贪心-D
来源:互联网 发布:javascript 书籍 知乎 编辑:程序博客网 时间:2024/05/29 08:36
原题
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思路&解析
从每一列里各取一个数,求有多少组四个数的和加起来为零。
先分别求出前两列后两列的所有的和,然后对后两列的和进行排序,对后两列进行二分查找看有多少种情况即可。AC代码
#include<stdio.h>#include<iostream>#include<string.h>#include<algorithm>using namespace std;int a[4002][4],sum1[16000002],sum2[16000002];int main(){ int n,mid; while(~scanf("%d",&n)) { for(int i=0;i<n; i++) { scanf("%d%d%d%d",&a[i][0],&a[i][1], &a[i][2],&a[i][3]); } int k=0; int m=0; for(int i=0;i<n;i++) for(int j=0;j<n;j++) { sum1[k++]=a[i][0]+a[j][1]; sum2[m++]=a[i][2]+a[j][3]; } sort(sum2,sum2+k); int cnt=0; for(int i=0;i<k;i++) { int left=0; int right=k-1; while(left<=right) { mid=(left+right)/2; if(sum1[i]+sum2[mid]==0) { cnt++; for(int j=mid+1;j<k;j++) { if(sum1[i]+sum2[j]!=0) break; else cnt++; } for(int j=mid-1;j>=0;j--) { if(sum1[i]+sum2[j]!=0) break; else cnt++; } break; } if(sum1[i]+sum2[mid]<0) left=mid+1; else right=mid-1; } } printf("%d\n",cnt); } return 0;}
- 二分贪心专题D
- 二分贪心 D
- 二分贪心 D
- 二分贪心 D题
- 二分贪心—D
- 二分贪心-D
- 二分贪心d
- 二分贪心-D
- CFcontest377-D 贪心,二分
- Codeforces 609D 贪心+二分
- codeforces 732D (二分 贪心)
- 【codeforces 732D】【二分+贪心】
- Codeforces #732D 二分 贪心
- CodeForces 363D 【二分+贪心】
- Atcoder 056 D 贪心+二分
- ACM-二分贪心D-04
- 二分贪心练习题D-4
- CodeForces 614D 二分+贪心
- 数组相关操作(转载)
- ROC曲线及AUC计算
- 【Netty基础】基于HTTP的文件下载Server实例
- CSDN中如何插入数学公式
- Fiddler 真机抓包:Android
- 二分贪心-D
- 空指针异常的总结(转载)
- SSD: Single Shot MultiBox Detector
- tf.transpose函数的用法
- 安卓反编译入门(二)
- Ubuntu安装Anaconda
- java7新特性(转载)
- 贪吃蛇(js小游戏)
- 2017.05.27【提高组】模拟赛B组