<script src="http://maps.google.com/maps?file=api&v=2&key=ABQIAAAA5V-InyKTY5eUzB6Np8mgrRSUlp8nB-VEdbraNR1unY1m8-19kxRFnyL6rY3f-xJJso8tOoRRS7zS-w" type="text/javascript"></script> 以后提到《国际大学生程序设计竞赛例题解》(包括一到三号分册)将用《ACM题解》代替。
《ACM题解》中的大部分代码都是用PASCAL来书写的,而本人只用过C++以及C#,而C++的灵活和高效使我最终选择了将所有《ACM题解》上的代码用C++重新书写。原书中的变量定义十分的不规范(竟然是一堆的单字母),也许在高强度的竞赛中为变量起个恰当而好听的名字看起来是一件画蛇添足的事情,但是出于个人对编程风格的执着,所以将尽量使用易读而简短的变量名称。
ACM竞赛本身追求的是算法的正确性以及运算效率,所以,无论程序代码风格如何,只要能在时限内输出正确结果也就算通过了,但是我更希望用现代的程序设计风格及思想去尽量做一些改变,让代码看起来更加优美一些。所以,除了在解题的算法上花费精力之外,同时也会在数据结构及程序架构方面投放相当的脑力,以求不仅能解决问题,而希望用不同的方式更好地解决相同的问题。
个人更偏爱面向对象的设计风格,因为无论从设计还是维护又或者是扩展,它都能带来相当大的实在的好处。当然,我会尽量避免使用虚函数,毕竟C++和C在效率上的重要区别也就在于虚函数的引入而带来的副作用了,但如果加上虚函数会带来无法抵受的诱惑,我想作为一个凡人,我也是不会有所抗拒的。
关于一些普通的数据结构,如链表,Map等,以及一些搜索和排序算法由于在STL(没听过?那你对C++的了解实在是太浅薄了)已经很完美地提供了解决方案,若非程序本身就是对数据结构和算法的研究,一般我都将使用STL所提供的类库以使自己能摆脱一些机械的行为(如重复实现QuickSort排序算法)。并且,在风格方面,我也尽量往STL的设计方向靠拢,也许这会给部分STL经验不足的人带来阅读上的麻烦,但个人认为应该去把STL知识恶补一下才是正道呢。<script type="text/javascript"> // </script>