1. 程式人生 > >2018NOIp提高組考前集訓心得

2018NOIp提高組考前集訓心得

背景 弱省小白至強省名校集訓,心得頗多 心得 學習划水一年,連模板都別不全的小白到某市某中學參加考前集訓。 之前在自己的學校裡都是各種考試韌性測試,各種考試爆零。一心只求正解,殊不知出題人心險惡。 而某校則不同。他們的題目大都一套一套做,並且考試時既有簽到題,也有玄學題。上午考完試後,會發出天書題解,並會在講題前留有時間自己分析。在講題時,都是些OI大佬,每個人都會有一套自己的講題方法。 廢話不多說 在集訓那些天,本人倒是補上了之前部分記不到的模板。在講一道簽到題求逆元時,詳解了三種求逆元的方法: ?:費馬小定理:ap2=a1(%p)a^{p-2}=a^{-1} ~(\%p)~

1(%p) ?:線性求逆元:invi=(pp/i)invp%i%pinv_i=(p-p/_i)*inv_{p\%i}\%p ?:拓展歐幾里得: 一大玄學演算法,以類似與求模方程的解法求逆元…… 費馬小定理適用於單個數求逆元,線性求逆元法適用於某區間內所有數的逆元,拓歐的話隨緣強者專屬 除此之外,就是區間類問題: ?:只維護不修改,O(1)演算法ST最快 ?:只求和且修改,樹狀陣列常數優 ?:既求最值由算和,用線段樹最自由 此外,ST表用的時2進位制思想,通過log2來劃分區間;樹狀陣列無法維護就最大值,藉助計算機補碼來縮小常數;線段樹是騙分最常使用的資料結構。 ?:矩陣優化:通過建立轉移矩陣,利用快速冪演算法,把線性做法的時間複雜度降到log級別

以上種種,很少出現在正解之中 這不是廢話

這次外出考前集訓,學習到的知識點其實很少某蒜客上都講過。這次學到的大都是部分分的拿法以及考試的策略問題。 —————————暴力是正解之母,騙分是省一之師————————— 暴力的優化往往可以拿到很高的分數。在之前本人只想正解 以上演算法常用於騙分: 1.去他的組合數計算,線性求階乘後逆元乘法取模,把帕斯卡·盧卡斯完全拋之腦後。當然,本人記不到他們的程式碼 2.忘記繁瑣的區間模擬 逆序對,樹狀陣列程式碼短[與線段樹相比],好理解[相比於ST表],充分呼叫了計算機底層運算,不要大常數,不要O(n2n^2),只要O(nlognnlogn

),你值得擁有。 3.樸素動態規劃或暴力遞迴,複雜度我確不敢恭維。線性演算法要超時?矩陣優化來幫你。集訓前本人對矩陣不是一竅不通的。推出轉移矩陣,寫一個矩陣乘法函式本人不會寫類,懶得過載運算子+快速冪,沒有AC也有80. 4.記憶體超限惹不起,滾動陣列造奇蹟。在ST表或求大數斐波那契時,本地DEV不會報MLE,一提交就可能超限。化二位為一維,化一維為個體。 優化操作,滾動最秀;記憶體超限,降維千古

//斐波那契滾動
int a=1,b=1,c;
for(int i=3;i<=n;i++){
     c=a+b;
     b=c;
     a=b;
}
cout<<c<<endl;

5.打表是一門技術,有時也需要靠運氣。

注意事項 1.bug!!!如果你寫完程式碼跑樣例的時候攤上bug,那你多半gg了。寫程式碼之前一定要看清題目,寫的時候也要謹慎。重慶好啊,windows系統可以用devcpp除錯。 2.十年競賽一場空,沒寫long long見祖宗!不要讓long long阻礙你的夢想,不要為RE讓你止步不前。 3.AC還是GG,freopen很關鍵!在考試時應反覆檢查自己的檔案讀取,提交時不要在freopen前留下// [尤其時很多用慣了OJ評測的同學,需要尤為注意] 4.陣列大小要合適。開小了,AC前加P;開大了,你只剩MLE。

人生沒有最短路,你我就是連通圖,今天你AC,弗驕,弗傲,明日…………