这道题算是一道模板题吧,思路是矩阵变换。一个问题是,怎样快速求矩阵的 n 次幂,这个可以通过分治搞定,在这题里我没有用递归的方式,而是用位运算。在遇到 repeat 命令的时候,可以用递归的方式,简化程序编写;需要注意 repeat 后面的数字只是非负的,有可能是 0. 还有记得输出的时候要判断会不会是 -0.00 这样的东西。

至于三种变换的矩阵,这里就不细说了,移动和缩放其实还是比较简单,旋转比较复杂,维基百科里有介绍。

这次在上面栽了两次,原因是 repeat 时我判断如果是 0 就直接返回了单位矩阵,而没有读到下一个 end 命令。后来为了改得方便,也没有在一开始特判 0, 所以遇到 0 的时候还是会“白算”比较多东西。不过有句话说,要避免不成熟的优化,呵呵……

代码如下:

原创文章,转载请注明来源:http://euyuil.com/3236/acm-icpc-2011-beijing-a-letter-to-programmers/