ACM练级日志:微软编程之美比赛测试赛-3(高精度相关)

来源:互联网 发布:暖风机哪个牌子好 知乎 编辑:程序博客网 时间:2024/06/05 18:54

微软的这个测试赛也不是那么水,看第一题那个不友好的A+B也就能猜出一二,第三题那个套着高精度的DP是无数NOIP小白的噩梦,包括我在内。不过学习了面向对象程序设计之后似乎对以前处理高精度的方法重新地认识了,发现如果用这种思想去对付高精度的话,事情会简单不少。


把高精度的数定义成一个struct是非常明智的。好吧,我对class还比较怀疑,所以暂且还是用struct吧,这样就可以把每个数的信息打包,用不着定义那么一堆数组了。而且还可以对它进行初始化,用一个行为函数就可以做到了,非常简单,不得不说面向对象的思想还是挺管用的。


最关键的是怎么算,一开始人们都喜欢写个函数算,比如SuperAdd(bigint a, bigint b),名字看起来挺酷的,不过在DP套高精度或者随便什么需要套高精度的里面这个就会非常麻烦,因为你肯定一开始是要用低精度写的,之后改高精度会异常困难。所以现在我改用重载运算符做,用bigint operator +(const bigint &a, const bigint &b)做,这样所有涉及到高精度的加法都会自动用这个加号做,而不会影响普通的加法,这样原来的所有运算符基本上都不用改,非常好用。


还有就是最近越来越觉得输出测试信息好用了,比一步一步慢慢跟效率不知提高了多少倍,只不过带来的风险是可能会忘了删调试信息,我的方法是在每个调试信息处写个TEST,并且用明显的//////////////括起来, 然后用Ctrl+F最后查找TEST并加一个*号就完事了。


最近开始准备把一些常用的公式,比如划分树那个区间缩小的计算公式写在本上,这样比赛的时候抄就行了。我是实在没弄懂那个区间缩短到底怎么算的。果然是比较愚笨啊。

0 0