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?In Reply To:这题太坏了,wa无数次,发现这题加一组数据可以rejudge无数程序 Posted by:bluewind at 2006-08-08 23:58:43 > 用I64d > 0 0 0 0 0 > 10000000000 > 不用I64d > 0 0 0 0 0 > 1410065408 (越界的程序也能AC~~~)... > > 偶的程序wa无数次,高手指点一下。(hash...) > #include<stdio.h> > #include<string.h> > const __int64 M=55457; //prim > struct record > { > __int64 value; > __int64 cnt; > }hash[M]; > __int64 mypow[101]; > int main() > { > __int64 a1,a2,a3,a4,a5,i,j,k,ans,sum,value; > unsigned __int64 p; > for(i=-50;i<=50;i++) > { > mypow[i+50]=i*i*i; > } > > while(scanf("%I64d%I64d%I64d%I64d%I64d",&a1,&a2,&a3,&a4,&a5)!=EOF) > { > memset(hash,0,sizeof(hash)); > > for(i=-50;i<=50;i++) > { > if (!i) continue; > for(j=-50;j<=50;j++) > { > if (!j) continue; > value=-a1*mypow[i+50]-a2*mypow[j+50]; > p=unsigned __int64(value*value)%M; > while(hash[p].cnt && hash[p].value!=value) p=(p+1)%M; > if (!hash[p].cnt) > { > hash[p].value=value; > hash[p].cnt++; > } > else hash[p].cnt++; > } > } > ans=0; > for(i=-50;i<=50;i++) > { > if (!i) continue; > sum=a3*mypow[i+50]; > for(j=-50;j<=50;j++) > { > if (!j) continue; > sum+=a4*mypow[j+50]; > for(k=-50;k<=50;k++) > { > if (!k) continue; > value=sum+a5*mypow[k+50]; > p=unsigned __int64(value*value)%M; > while(hash[p].cnt && hash[p].value!=value) p=(p+1)%M; > ans+=hash[p].cnt; > } > sum-=a4*mypow[j+50]; > } > } > printf("%I64d\n",ans); > } > return 0; > } > > Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator