CSP考前複習 關於考試時的注意事項

2021-09-29 18:09:34 字數 3197 閱讀 4885

一、關於暴力

1、為什麼要打暴力——得分

這不廢話嗎考試的時候不打暴力等著爆零嗎嚶嚶嚶

首先,我們要明確打暴力是一件非常正確且有用的事:

第一,如果最後想不出正解,暴力的分數拿到手一般也能獲得不低的成績;

第二,出題人有時會把正解的思路放在暴力分里,比如某些dp和資料結構,往往是先引導你打出暴力,然後進一步優化得到正解;

第三,就算真的打出了正解,暴力也是用來對拍的乙個好方法,可以讓你的正確性得到保證。

當然,有時候出題人想要故意提公升題目難度,就會把部分分給的少,甚至可能用部分分來誤導思想,不過這種情況一般佔少數,在csp的正規比賽中部分分都是用來提示正解的,只是分明顯與否。

2、暴力該怎麼打——審題舉個例子,我認為部分分給的最好的——天天愛跑步。我之所以認為這道題的部分分最好,一是因為它具備上面提到的提示效果,你只要打完所有的暴力,再加上思考和碼力,就能得到正解;二來,即使你想不出正解,部分分之間的層次性也很強,完全可以根據自己的能力得到對應的分數。

這是部分分的分布:

假設我們之前不認識這道題,重新來分析一遍:

1、測試點1~5明顯送分,只要讀懂題就能想到暴力模擬

2、測試點6~8因為資料範圍擴大了,之前的演算法不能再用,我們換個思路,考慮每個觀察員對什麼樣的經過路線有貢獻,於是思路往差分上走,再通過一些思考可以推出產生貢獻的式子

3、測試點9~16舉出兩種特殊情況,結合6.7.8的差分,再加上一定的模擬,可以得到樹上差分的程式。

4、考慮到將鏈拆為上行和下行兩段,發現可以用部分分的解法來分步解決,再加上碼力和實現,就可以得到滿分程式。

綜合上文以及我的經驗來看,分析暴力得分以及從暴力到正解一般有以下思路:

1、看資料範圍:

常見的有這些:

n<=10 n<=10n<=10 階乘級演算法:列舉全排列

n<=20 n<=20n<=20 指數級演算法:暴力搜尋,依次列舉,狀壓dp,多維dp

n<=500 n<=500n<=500 n^3 :dp,搜尋剪枝,floyd,網路流

n<=2000 n<=2000n<=2000 n^2 :dp,迴圈迭代,遞迴處理

n<=100000 n<=100000n<=100000 nlog^2n~nsqrt(n):二分+資料結構,樹套樹,分塊,cdq,二維樹狀陣列

n<=500000 n<=500000n<=500000 nlogn:線段樹,平衡樹,dp優化,莫名其妙的貪心

n<=1000000 n<=1000000n<=1000000 nlogn~n:奇怪的貪心,結論,數學題,樹狀陣列,時限開大了的線段樹,最短路,最小生成樹,快速冪等(這個檔最多

n<=10000000 n<=10000000n<=10000000 矩陣快速冪

再往上一般就不是csp會考的東西了。

2、轉化題意

許多的題目其實本質上考察的東西是一樣的,只不過由於題面的加工,我們往往不能辨識出這是哪一類問題。這時候就要進行模型轉化,將所求的問題分成幾個子問題分別求解,或者是轉化為一類我們學過的問題。有的題像是dp,但是實際上可能是個結論題或者數學題;有的題看上去是圖論,其實可以做出生成樹然後轉化為樹上問題。這一步比較靠個人能力以及做題經驗,這裡不多闡述。

3、正難則反

如果推dp式子已經到了絞盡腦汁的地步卻還是不能過掉全部資料,抑或是在試圖優化乙個log時無從下手,這時候就要逆向思考。一方面,可以考慮利用當前得到的有用結論,從另乙個方面來解決問題;另一方面,如果直接求出滿足條件的答案不好實現,我們可以考慮算出不合法的答案,或者是通過二分來轉化為檢驗答案,這樣往往能夠降低**難度和思維難度。

4、打表與搜尋

這兩個算是暴力中最暴力的,但是很多時候打表可以得出很多結論,有時候就能過掉結論題,或者是通過決策單調性優化dp,總之用處很多。讀不懂題,可以打表理解;優化不了,可以打表找出規律。而如果搜尋得當,像去年noip的d2t2,打出正解也不是難事。因此,無論掌握了多麼高階的演算法,最為基礎的這些仍能起到很大的作用。

二、關於查錯

在考場上想要拿到高分,光有想法是不夠的,還要有足夠的實現能力和除錯能力。多少人想出了正解,卻最後掛在細節上,結果最後還不如暴力分高……

如果想要鍛鍊實現能力,我推薦去做下豬國殺這樣的模擬題;如果想要鍛鍊除錯能力,建議多去做做大雜燴型別的資料結構題,比如樹鏈剖分+換根,lct+最小生成樹+tarjan,吉司機線段樹大全等等……

當然,並不是說做的多就一定能力強,也不是說不做能力就很弱。經過我的總結,做到以下幾點,一般可以很快的除錯出錯誤來。

1、認真構思

**實現的錯誤很多都是因為在構思時沒有考慮到個別特殊情況或者是邊界條件,最後反倒會花很多時間來處理這些問題。因此在動手打**之前,要保證思想已經成熟。當然,也可以一邊敲著你已經很熟悉的模板一邊思考,但是最核心的部分一定要深思熟慮,考慮到能考慮到的所有情況,盡可能不出差錯。比如線段樹的pushup和pushdown。既然多數時候都錯在這,那麼就可以放到最後來實現,爭取一次性寫對。

2、多寫函式

並不是說函式越多越好。在某些重複呼叫的部分,可以考慮寫函式來實現,避免重複的**造成的**量大,**量一大除錯難度就會上公升。不過,寫函式是在你確定這幾部分可以用同乙個函式實現的前提上,比如豬國殺的抽牌、出牌、死亡判定等。如果牽涉到細節上的不同,而你又拿不準,建議還是展開寫,否則後期除錯反而會增加難度。

3、對症下藥

所謂「症」有多重意思,我們在除錯**時,往往考慮這三點:

①錯誤的型別。如果是re或者tle,多半是在遞迴函式的地方出了問題,這時候就可以使用return 0**,判斷出是在哪個地方出了問題;如果是wa,那麼有可能在某一步之前你的答案都是正確的,此時採用分段輸出+人肉檢索就可以判斷。

③自己的問題。打了這麼久的**,大家應該對自己常常犯什麼樣的錯誤有印象,比如忘了開longlong,加邊加成單向,陣列開小,臨時變數不初始化等。建議在考前把自己的wa**拿出來翻一翻,總結一下常見的錯誤,在考試的時候就要專門針對這些錯誤進行檢查。去年noip的考場上我就是因為d2t1陣列開小d2t2乘法未及時取模而直接錯失一等

下面是我個人總結的一些錯誤彙總:

不開longlong,vis陣列多次呼叫未清空,忘了把cnt從2開始,陣列開小,階乘的第0位不賦值,一行**過長導致同一變數寫了兩次,忘記及時取模,標記下傳順序有誤,邊界條件考慮失誤,二分上下界不對

CSP考前複習 關於考試時的注意事項

前言 作為一名已經服役4年的老年oi選手,經歷過的考試已經是數以百計了。在這麼多次考試中,爆零墊底是常有的事,運氣好了靠暴力得到好名次的事也經常發生。那麼,csp臨近,我想有必要好好整理一下這些問題和經驗。一 關於暴力 1 為什麼要打暴力 得分 這不廢話嗎考試的時候不打暴力等著爆零嗎嚶嚶嚶 首先,我...

華為面試考試時需要注意什麼 ielab

一 面試預約和流程 面試預約 1 預約hcie面試前需通過hcie lab考試 2 華為 填寫hcie面試預約申請,通過hcie實驗考試5個工作日後即可預約 3 預約hcie面試需提供考試券,通過lab考試後的第一次面試,使用lab 面試考試券即可,lab成績有效期內的面試補考,請使用新購買的面試考...

關於彙編的期末考試複習1

彙編期末考試備考 1.組合語言屬於機器語言。2.處理器是由運算器,控制器和暫存器組構成的 3.儲存器的乙個位元組表示8位 bit 例如 暫存器ax分為高八位ah和低八位al兩個位元組,4.mov操作指令的使用方式 1.mov 暫存器,資料 例如 mov ax,8 2.mov 暫存器,暫存器 例如 m...