您的位置:首页 > 产品设计 > UI/UE

uva 1152 4 Values whose Sum is 0(二分_中途相遇|| hash)

2015-08-28 16:40 435 查看
hash

#include<cstdio>
#include<iostream>
#include<map>
#include<vector>
using namespace std;
const int maxn=4005;
int a[maxn],b[maxn],c[maxn],d[maxn];

struct Hash_map
{
static const int mask=0x7fffff;
int p[8388608],q[8388608];
void clear()  //初始化为0
{
for(int i=0; i<=mask; ++i)
q[i]=0;
}
int& operator [](int k)  //重载“[]”
{
int i;
for(i=k&mask; q[i]&&p[i]!=k; i=(i+1)&mask);
p[i]=k;
return q[i];
}
}hash;

int main()
{
int t,i,j,n;
scanf("%d",&t);
while(t--) {
scanf("%d",&n);
for(i=0;i<n;i++) {
scanf("%d%d%d%d",&a[i],&b[i],&c[i],&d[i]);
}
hash.clear();
for(i=0;i<n;i++) {
for(j=0;j<n;j++) {
hash[a[i]+b[j]]++;
}
}
int sum=0;
for(i=0;i<n;i++) {
for(j=0;j<n;j++) {
sum+=hash[-c[i]-d[j]];
}
}
printf("%d\n",sum);
if(t) printf("\n");
}
return 0;
}


二分_stl

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn=4005;
int a[maxn],b[maxn],c[maxn],d[maxn],s1[maxn*maxn],s2[maxn*maxn];
int main()
{
int t,n,i,j;
scanf("%d",&t);
for(int z=1;z<=t;z++) {
scanf("%d",&n);
for(i=0;i<n;i++) {
scanf("%d%d%d%d",&a[i],&b[i],&c[i],&d[i]);
}
int k1=0,k2=0;
for(i=0;i<n;i++) {
for(j=0;j<n;j++){
s1[k1++]=a[i]+b[j];
s2[k2++]=c[i]+d[j];
}
}
sort(s2,s2+k2);
int sum=0;
for(i=0;i<k1;i++) {
sum+=upper_bound(s2,s2+k2,-s1[i])-lower_bound(s2,s2+k2,-s1[i]);
}
printf("%d\n",sum);
if(z!=t) printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: