poj3349 Snowflake Snow Snowflakes

自己写的第一个hash。思路比较复杂:

以六个数的平方和作为key。hash function为index=key mod 99991(99991为不大于100 000的最大质数)。将这个key保存到f[index]中。如果碰到有相同key值的数(相同key但不一定完全相同雪花),对这两片雪花进行仔细的比较,如果相同则返回;如果不同将此key保存到f[index2]。hash function为index2=((key mod 99990)+1+index)mod 99991。

复杂的思路造就复杂的算法,以下是TLE版本:

Code

 

对以上的TLE版本进行一点小修改:第一,以六个数之和mod 99991作为key,这样就可以用int代替了double;第二,用拉链法代替开地址法,提高效率;第三,读数字用getchar()代替scanf(),同样提高了效率。最后3922ms惊现AC。。。

Run ID User Problem Result Memory Time Language Code Length Submit Time
5123591 zen_chou 3349 Accepted 6472K 3922MS C 1464B 2009-05-09 17:25:29
Code

 

参考:http://www.cppblog.com/RyanWang/archive/2008/11/19/67271.html, http://blog.csdn.net/suikay/archive/2009/03/29/4033415.aspx

 

posted @ 2009-05-08 18:49  MyShowTime  阅读(262)  评论(0编辑  收藏  举报