K - 4 Values whose Sum is 0

Crawling in process... Crawling failed Time Limit:9000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu

Appoint description:
System Crawler (2015-03-12)

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 ) AxBxCxD are such that a + b + c + d = 0 . In the following, we assume that all lists have the same size n .

Input

The input begins with a single positive integer on a line by itself indicating the number of the cases following, each of them as described below. This line is followed by a blank line, and there is also a blank line between two consecutive inputs.

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 test case, the output must follow the description below. The outputs of two consecutive cases will be separated by a blank line.

For each input file, your program has to write the number quadruplets whose sum is zero.

Sample Input

1

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

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

 #include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <string>
#include <vector>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <list>
#include <iomanip>
#include <cstdlib>
#include <sstream>
using namespace std;
typedef long long LL;
const int INF=0x5fffffff;
const double EXP=1e-;
const int MS=;
int A[MS],B[MS],C[MS],D[MS],n,sum[MS*MS]; int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
for(int i=;i<n;i++)
scanf("%d%d%d%d",&A[i],&B[i],&C[i],&D[i]);
int cnt=;
for(int i=;i<n;i++)
for(int j=;j<n;j++)
sum[cnt++]=A[i]+B[j];
sort(sum,sum+cnt);
LL ans=;
for(int i=;i<n;i++)
for(int j=;j<n;j++)
{
ans+=upper_bound(sum,sum+cnt,-C[i]-D[j])-lower_bound(sum,sum+cnt,-C[i]-D[j]);
}
printf("%lld\n",ans);
if(T)
printf("\n");
}
return ;
}

最新文章

  1. java异常笔记
  2. Angular学习
  3. saltstack之(七)配置管理系统初始化init
  4. ubuntu server获取并自动设置最快镜像的方法
  5. windows下使用VirtualEnv
  6. PHP 正则通配符
  7. poj 1847 Tram【spfa最短路】
  8. poj 2593 Max Sequence(线性dp)
  9. 用Qt开发Web和本地混合的应用
  10. Linux - 简明Shell编程07 - 数组(Array)
  11. [知了堂学习笔记]_纯JS制作《飞机大战》游戏_第3讲(逻辑方法的实现)
  12. windown快速安装xgboost
  13. SQL Server ——动态SQL
  14. ELK统一日志系统的应用
  15. JSP页面导致tomcat内存溢出一例
  16. ckeditor_学习(1) 基本使用
  17. MVC 5使用TempData Object跨视图传递数据
  18. PAT 1050 String Subtraction
  19. Android USB gadget configfs学习笔记总结
  20. 漂亮的ActionBar效果

热门文章

  1. TBluetoothLE
  2. 在WP8上搭建cocos2d-x开发环境
  3. Collection Operators
  4. JavaServer Faces 2.2 requires Dynamic Web Module 2.5 or newer
  5. 用完成例程(Completion Routine)实现的重叠I/O模型
  6. spring-flex
  7. C++ Bit Fields
  8. 【转】网络中的AS自治域
  9. [NOIP 2014复习]第三章:动态规划——NOIP历届真题回想
  10. cocos2dx动画Animation介绍