1. 程式人生 > >2016.12.03【初中部 NOIP提高C組】模擬賽

2016.12.03【初中部 NOIP提高C組】模擬賽

4855. 【NOIP2016提高A組集訓第6場11.3】荷花池塘 

·題目大意:從一個給定位置到達一個給定位置,只可以走馬步,有些位置走不到,需要放荷葉,但岩石出不能放,讓你放最少的荷葉走到給定位置並輸出步數

·題意顯然

·bfs

·記錄到一個位置需放的最少荷葉,記憶化

4841. 【NOIP2016提高A組集訓第4場11.1】平衡的子集 

·題目大意:給你n個數,讓你在其中任選一堆數並使得這堆數一定能被分成完全相等的兩組

·暴力的方法顯然,但只能水大概50分

·更加優美的暴力也不過80分

·可以想折半操作

·先把這n個數分成|n/2|和n-|n/2|兩堆,然後對於第一堆處理出它所能構造的所有狀態,也就是到底怎麼放這一堆的數,如果放到左邊那麼就是加上它,放到右邊就是減去它,哪邊都不放就是0,對於第二堆亦然

·處理出好怎麼放後,我們對於放在左邊的值於右邊的值相互匹配,注意優化和判重就行了(優化:排序後建立頭尾指標,表示相等的一段

·判重可以用or位運算一下,或者雜湊

4886. 【NOIP2016提高A組集訓第13場11.11】字串 

·題目大意:讓你求一個長度為n的串,不包含給定的危險串的個數

·很明顯可以暴力,水個40分

·想想dp

·可設fi,j表示當前構造一個長度為i的,後面j位為所給定危險串的前j位的方案數

·很明顯可以列舉第i+1位的長度,並跟新fi+1,_的值

·再設一狀態Ai,ch表示當前在危險串裡的第i位改為ch所能在危險串裡匹配的最右位置

·很明顯fi+1,a[i,ch]+=

fi,j

·那怎麼求Ai,ch呢?

·可以用kmp

{

這裡簡單的講講怎麼kmp

其實就是優化了暴力

求出kmp的next陣列後(怎麼求自己百度一下),在原串中,假設第i位放ch這個字元,而如果與原串不符的話,則直接把i賦值為next[i],可以提高效率,至於為什麼,自己想想吧,當然,也可以不用。

純粹的暴力的話那更不用說了,直接O(26n²)的暴力即可

}