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 |
然后就是C++里MLE,去掉memset就tleIn Reply To:hash....为何就wa了呢?? Posted by:ning at 2006-03-28 19:20:50 > //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