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 |
Re:这题怎么节省时间,我按照经典的叉积方法实现,却用了500多ms,请问15ms的是怎么搞的?In Reply To:Re:这题怎么节省时间,我按照经典的叉积方法实现,却用了500多ms,请问15ms的是怎么搞的? Posted by:zouyu9631 at 2006-08-23 22:55:04 可优化的大了。 nx和lx的差距只有1,你没觉得这么大的switch太亏了么?乘了半天,最后只差一倍,亏啊! 先定义 int c[2][10]={ {0,-1,0,1,-1,0,1,-1,0,1}, {0,-1,-1,-1,0,0,0,1,1,1} }; 代替巨大的switch;c[0]改变x,c[1]改变y 设i=dir-'0',i就是dir的数值。 那么 res += nx*ly - lx*ny 恒等于+= nx*(ny+c[1][i]) - (nx+c[0][i])&ny 化简为+= nx*c[1][i] - ny*c[0][i]; 一个数组+一句话代替了上面程序的大部分,还避免了nx*ny这种可能越界的巨大数。 我也新手,偶尔碰到一些优秀的代码而已。没事搞些牛人的代码看看,很提升的。 我跑了157ms,那15ms的犇人……唉,可望而不可及啊。 Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator