zoukankan      html  css  js  c++  java
  • # 4 Values whose Sum is 0 (POJ

    题目

    SUM问题可以表示为:给定四个具有整数值的列表A,B,C,D,计算多少个四元组(a,b,c,d)∈A x B x C x D使得a + b + c + d = 0。在下文中,我们假定所有列表的大小均相同。
    输入项
    输入文件的第一行包含列表n的大小(该值可以最大为4000)。然后,我们有n行包含四个分别属于A,B,C和D的整数值(绝对值最大为2 28)。
    输出量
    对于每个输入文件,您的程序必须编写四倍数,其总和为零。
    

    .

    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
    

    答案

    #include<cstdio>
    using namespace std;
    const int MAX=4000*4000+7;
    int h[MAX],t[MAX];
    int n,j,i,a[4003],b[4003],c[4003],d[4003],P;
    long long sum=0;
    int hash(int x){
    	int y=x%MAX;
    	if(y<0) y+=MAX;
    	while (h[y]!=0&&t[y]!=x)
    	y=(y+1)%MAX;
    	return y;
    }
    int main(){
    	scanf("%d",&n);
    	for(i=0;i<n;i++)
    		scanf("%d%d%d%d",&a[i],&b[i],&c[i],&d[i]);
    		for(i=0;i<n;i++){
    			for(j=0;j<n;j++){
    				P=hash(a[i]+b[j]);
    				h[P]++;
    				t[P]=a[i]+b[j];
    			}
    		}
    	
    	for(i=0;i<n;i++)
    		for(j=0;j<n;j++){
    			P=hash(-(c[i]+d[j]));
    			sum+=h[P];
    		}
    	printf("%lld",sum);
    	return 0;
    }
    
  • 相关阅读:
    putty GB18030乱码
    iptables小复习
    编译安装 openswan-2.6.34
    Windows常用的命令
    MySql实现远程连接
    防盗链
    java判断一个类是否公共类
    oracle sql性能
    状态模式让我们远离战战兢兢
    LVM管理
  • 原文地址:https://www.cnblogs.com/yuanyulin/p/14026786.html
Copyright © 2011-2022 走看看