| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
hash....为何就wa了呢??//pku2785 4 Values whose Sum is 0 hash+o(n2)
// hash
#include<stdio.h>
#include<memory.h>
//#include<conio.h>
int A[4005],B[4005],C[4005],D[4005];
const int HSize=4000*4005*3;
int HTable[4005*4000*3];
int Visited[4005*4000*3];
int Hash(int x)
{
int pos=x*10257-3;
if(pos<0)
pos*=-1;
pos%=HSize;
return pos;
}
void ToHash(int x)
{
int pos,ii=1;
for(pos=Hash(x);Visited[pos];pos+=ii++*3-1,pos%=HSize)
;
HTable[pos]=x;
Visited[pos]=1;
}
int Find(int x)
{
int pos,ii=1;
for(pos=Hash(x);Visited[pos];pos+=ii++*3-1,pos%=HSize)
if(HTable[pos]==x)
return 1;
return 0;
}
int main()
{
int n,rst=0;
int ii,jj;
for(;scanf("%d",&n)!=EOF;)
{
memset(Visited,0,sizeof(Visited));
for(ii=0;ii<n;ii++)
{
scanf("%d%d%d%d",A+ii,B+ii,C+ii,D+ii);
}
for(ii=0;ii<n;ii++)
for(jj=0;jj<n;jj++)
ToHash(A[ii]+B[jj]);
for(ii=0,rst=0;ii<n;ii++)
for(jj=0;jj<n;jj++)
if( Find(-1*(C[ii]+D[jj])) )
rst++;
printf("%d",rst);
}
// getch();
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator