一年前,还是大二,当时学校推送CCF认证的优惠报名,没有当回事。因为我并没有认真学数据结构(有点后悔),直到班里有几个同学拿了比较高的分数后,CCF认证才引起了我的关注。上学期期末和朋友的无意交谈中提到了这一次的CCF认证(第十六次),加上在这之前也在网上了解过CCF的作用及其含金量,于是我决定寒假回家准备一下,争取在3月份的CCF认证拿到比较理想的成绩,这样也有利于我复习考研。
于是期末考试的那段时间,我就买了胡凡的《算法笔记》(在CSDN上看到的,专门针对这种程序设计和算法考试,不是打广告),寒假回到家里就开始刷PAT的题。PAT的题也是分乙级、甲级和顶级的,难度依次上升,有兴趣的朋友可以去了解一下PAT考试——乙级最简单,很少用到高级的数据结构。甲级是英文描述,对于考生来讲是一道坎,会用到高级数据结构。顶级的话涉及ACM竞赛题,这个没有点底子是动不了的。
CCF认证对于考生来说并不友好,因为提交代码后并看不到分数,且最终评判的分数是以最后一次提交为准。所以就需要考生有强大的自我评判能力,对于自己的程序,要做到99%以上的自信。但光有自信是没有用的,因为CCF每次出五道题,难度指数型增长。第一题一般是水题,但有很多坑。比如这一次的第一题就是说给出一个有序的正整数序列,然后从大到小给出这个序列的最大值,中位数以及最小值,若中位数是小数则保留一位小数输出。思路很简单——设置一个数组,因为给的序列是有序的,所以只需要计算中位数即可,然后判断数组的单调性。但最终只得了70分,后来想了想,大概是因为数组开大了导致溢出没能通过样例。
说到样例,CCF的测试样例由简单到复杂。题目中给考生的样例往往是最简单的,并且简单样例所占分值比较少,所以对于后三题,想要拿到满分是很难很难的事情,甚至连题目都啃不下来。这次第二题是一道表达式求值的问题,运算只涉及0~9的加减乘除,比较容易,也是我唯一一道100分的题。至于第三题,题干长得像一道阅读理解,讲了磁盘阵列RAID5的问题。一开始就给你来一大段专业背景知识,对于非计算机专业的小可爱来说实在是太不友好了。光是背景知识就能把人弄晕了,我没有读懂,所以直接放弃这一题了。第四题模拟了多进程间的通信问题,题干不长,但要求专业素养高——给一系列进程编号及其状态,判断是否会发生死锁。至于最后一题,考了一个最短路径,背景结合了《流浪地球》,很可惜我没有看过(所以我仅仅把样例通过,拿了5分)。
总结一下,CCF的考题要求的知识面很广,对编程能力来说也是极大的考验。CCF认证不仅考查编程能力,还有阅读能力,建模能力和心理素质。这次CCF认证对我来说是一次很好的经历,让我认识到了自己还有很多不足之处。未完待续……