| ||||||||||
| 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