Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

Re:这题怎么节省时间,我按照经典的叉积方法实现,却用了500多ms,请问15ms的是怎么搞的?

Posted by lirrrr3377 at 2009-04-29 11:33:12 on Problem 1654
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:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator