CCF-CSP認證考試介紹以及複習技巧指導
-
CCF-CSP考試時間及費用
時間一般是每年3、9、12月的中旬,報名時間一般也是提前一個月,不固定。
非計算機協會會員300元/次,會員180元/次(學生會員需繳納50元/年的會費),相當於一年可以打三次折。
-
程式語言及編譯器
- C/C++:Dev-CPP 5.4.0 (Min GW 4.7.2)
- Java:Eclipse (Java SDK 1.7.0_15)
- Python:3.6.5
- 瀏覽器:Chrome
報名時選擇其中一種程式語言,而且考試時只能用報名時選擇的語言答題.
-
難度及題目規律
難度呈冪次增長(第一題難度n,第二題難度,第三題難度......:
第一題:一般是數值方面的問題(一群整數)基本一個for迴圈可以解決的了,比較簡單,學過C語言基本可以得分。推薦哈工大蘇小紅的C語言程式設計,這本書相對來說比較高階,會有涉及到連結串列操作,這對學習資料結構很有幫助。
第二題:一般是接近的複雜度,最少得需要兩個For迴圈,要說兩個For迴圈也不難,難就難在一般是時序題、通常要排序,而且要用到多元資料。比如18年3月的第二題碰撞的小球,
數軸上有一條長度為L(L為偶數)的線段,左端點在原點,右端點在座標L處。有n個不計體積的小球線上段上,開始時所有的小球都處在偶數座標上,速度方向向右,速度大小為1單位長度每秒。
當小球到達線段的端點(左端點或右端點)的時候,會立即向相反的方向移動,速度大小仍然為原來大小。
當兩個小球撞到一起的時候,兩個小球會分別向與自己原來移動的方向相反的方向,以原來的速度大小繼續移動。
現在,告訴你線段的長度L,小球數量n,以及n個小球的初始位置,請你計算t秒之後,各個小球的位置。---來自ccf-csp考題
其中會涉及到長度、個數、時間、速度等不同單位的資料。
第三題:一般會是字串的處理,而且一般是對複雜文字的處理,這裡最好使用C++裡邊的String類做字串處理,如果要自己用c語言寫字串處理函式,不僅不一定寫對,而且還會相當麻煩,浪費時間。
第四題:一般會用到高等資料結構,比如樹、圖,而且需要用到的演算法也不是課本上學到的簡單演算法,得用更高階一點的時間、空間效率更高一點的演算法。
第五題:一般是純粹的演算法題。但是演算法難度一般是ACM級別的,所以經過ACM訓練的訓練員也不一定能拿滿分。
-
準備的東西
- 訓練題:(1)ACM題庫。(2)CCF-CSP真題,總結每年題型。
- 書籍:CCF—CSP考試是可以帶書進去的 ,(1)如果對語法掌握不熟練的話可以帶一本程式語言書。(2)最好帶一本C++ STL方面的書(是STL工具書,STL怎麼使用的書,而不是STL原始碼分析類的書)STL方面的書可以幫助我們又快有準的寫出想要的排序等程式碼,如果我們當場寫的話會很浪費時間。(3)演算法書,有資源的可以找一本ACM培訓競賽書,前面也說過書上的演算法對付考試是不行的。需要更好的演算法。
- 每天寫程式,不能手生,最少得2h,適應4h的考試時間。
-
最後說一點得分技巧以及著重訓練能力
技巧篇:說明——CCF-CSP是機器閱卷評分,題目規定有程式碼執行用時,超時的測試用例是沒有分的。給分目前最小單位是10分,按照對你的程式碼的一個測試,比如從10到100這個規模來20%測試用例,100-1000來30%測試用例,1000-10000來50%測試用例,通過一個測試用例給10分,也就是說(1)我們自己測試對的在評分的時候不一定能拿滿分;(2)我們在3、4、5題上也可以通過實現簡單資料集上的程式碼而得分,而不是一分得不了,3、4、5題我們可以從最小規模開始,可以排除特殊情況來寫程式碼,只要簡單的測試用例能通過我們就能得分。
訓練能力:我們要想拿高分就要有針對性的訓練。(1)首先不能再出基礎性錯誤,比如輸入輸出,要按照題目規定來,要求輸入或輸出兩個資料間用空格分開我們不能使用回車分開,這樣會導致0分。我們可以通過真題訓練自己所使用語言輸入輸出程式碼的格式,也不要在這上面浪費時間。(2)要著重鍛鍊設計測試樣例的能力,我們在考試的使用程式碼提交上去後當時是沒有分數的,得第二天才有,所以我們並不知道我們提交的程式碼是否能拿滿分,這就要我們自己測試好再提交程式碼。(3)鍛鍊單步除錯能力,在平時程式設計的時候我們可以使用cout來輸出看一下執行過程中變數的值,但是這樣容易犯錯——考試的使用萬一沒有把測試用的cout刪除,這樣就會誤導機器判分,機器判斷輸出和正確輸出不一樣就是0分。
以上是我們學校李曉鷗老師對我們學院進行CCF複習技巧指導所做的報告總結。之後我會對CCF-CSP真題寫一些程式碼解法分析,我會從最笨的演算法寫起,並把逐步優化的思路寫上。最後會總結一下解題思路技巧,力求整理出來解決這一類問題的方法,最後希望能遇到問題有一定的思路,並在最難的4、5題得到分數,10分也不嫌少。也希望大家多多支援,多多指教。