此次比赛是我本人第一次参加全国性的编程比赛,比赛结果:全国c/c++
下面就部分比赛试题详细的谈谈:
第一题,填空题,还是比较简单的,唯一令人纠结的就是周岁到底是怎么算的。我的算法直接就是2014减去出生年份。
第二题,填空题,一道数据结构题目,有一定难度,题目大意:16辆车进栈再出栈,栈无限深,求共有多少种方式。当时看到这题,我还暗自窃喜,刚好之前看过刘汝佳的《算法竞赛入门》里有相似的一道题,可是却忘得一干二净,后来搞了16层循环,还好是一题填空题,答案在2,3秒后才跳出来了。当时的主要想法就是:每进一次栈都会假设有一次出栈,出栈的个数可以不同(0<=num<=i),所有不同的方式就是题目要求的总数。第i层for循环:。赛后,看了下刘汝佳那本书,题目愿意是给出一种出栈方式让你判断是否符合要求,如果按这种方式,需要把16的全排列先打印,显然花费的时间更长。后来也听了一些写出来的同学用的是模拟的方式。
第三题,代码填空题,也是一道严蔚敏《数据结构》里的相似题目,字符串的KMP匹配,同样看了这题很激动,因为自己本身本科期间数据结构学的比较好,可是给出的代码里有一个很令人凌乱的东西,就是匹配函数有一行给出一个变量n并赋值,其他地方也没提到这个变量,后来就一直在这上面下功夫,始终出不来结果,烦躁之时去了一下厕所,回来后,根据自己直觉写了出来。
第四题,关灯熄灯问题,数据比较大,达到10的16次方。当时初看以为要用到高精度,后来直接用了long
第五题,看上去比较复杂,细看比较简单,用了不到20分钟写完,实在想不出来有没有什么混淆人的地方,赛后和同学交流了一下,发现大家都是这样。由于没有oj实验,所以也不知道自己写的对还是不对。
第六题,算是一道比较难的题目,据说可以用动态规划,我自己想的是用宽搜,首先先找到一个合适的区域先标记,然后再向四周扩散,如果周围方块的价值减去还需建造的篱笆价值大于零,则将其算在内。然而该算法的正确性有待检验,当时给出的第一组测试数据没有通过。赛后想想,早知道放弃这一题,将前面的几题好好搞定。说不定会有更好的比赛结果。
总结此次比赛,结果还行,毕竟是第一次参加这种全国性的比赛,同时也更坚定了自己在算法道路上的不断追求。