CSP-S 2019策略分析

在這裏插入圖片描述

基本策略

  • 一些去重的題可以考慮放到平面上,然後最後用掃描線直接算面積,從而達到去重的目的。
  • 離散化

動態規劃

這是一類非常需要注意的題,注意狀態的設置以及思考優化方法,具體有:

時間優化:

  • 前綴和
  • 單調隊列
  • 斜率優化
  • 數據結構
  • 矩陣乘法
  • *四邊形不等式(出現機率不大)

空間優化:

  • 去除無用狀態
  • 循環狀態

模擬

這類題幾乎沒有思維難度,但是要考察對情況的考慮是否完全,需要重點考慮情況是否有殘缺等。
考察代碼實現能力。

數學

一般就是質數的性質和應用,線性篩法。

排列組合以及其他計數方法。
加法原理和乘法原理

Catalan數

容斥原理:
Ans=i=1n(1)i+1S1..SiAns=\sum_{i=1}^{n}(-1)^{i+1}|S1\cap ..\cap Si|

容斥原理很重要,有時候要考慮如何計算使得容斥更優(即使得每次減去的不重複)這個思想很重要。
JZOJ6403. 【NOIP2019模擬11.04】a

圖論

  • 最短路問題
  • 特殊圖(包括 樹,拓撲圖,二分圖等)。
  • *網絡流(一般不考)
  • 拓撲序往往很重要,很多關於無向圖或者元素出現先後順序的都可以用這個拓撲序的性質來做

對於樹
樹形DP,最小生成樹。

搜索

對於搜索題出的十分頻繁,這種題需要有很好的優化搜索的功底,如

  • 折半
  • 剪枝

對於搜索題需要儘量拿多的分。

構造

構造類題目一般沒有明確的算法,需要仔細分析題目的實質,並得出解法。
這個解法通常不是唯一的。
有時一個好的貪心可以得相當多的分。
有時搜索剪枝可以很大的提高效率。同樣以多得分爲目標。
需要很敏銳的數感。

分治

貪心

這是最難的題型之一。
因爲在不明白貪心的正確性的時候,是很難考慮用貪心的,而且證明正確性也也不容易。
所以這樣一來需要對貪心的策略有很深的理解。

二分

這種方法是很重要的。
一般只要出現”即最大又最小“這樣的字樣,算法一定是二分+貪心或DP判定。
所以這就要有很敏銳的套路感知以及算法的熟練度

數據結構

①並查集

  • 判斷圖的連通性

  • 最小生成樹/最大生成樹

  • 對具有相同性質的東西進行分類

  • 如果想要知道 對於一個全圖 刪點之後 ,查詢連通性,我們可以反過來搞,將刪點轉爲加點,再查詢連通性

  • 在“回溯”的時候進行統計,->帶權並查集

  • 注意 數組的大小,(注意 是否 有離散化 <->數組大小)

  • 注意 序列與圖的玄學聯繫與轉換 序列<->圖

②線段樹
這是個很重要的數據結構,需要熟練掌握它的用法。

  • 處理區間最大最小值的時候用到。
  • 處理修改以及查詢的時候有可能用到。
  • 要記住區間深度爲log級別的,所以有些可能無法解決的東西其實在線段樹上暴力即可。(例如區間取模,這利用每個數其實取模次數很少)
  • *樹鏈剖分裏面使用

③樹狀數組
這東西在很多時候能夠代替線段樹,因爲代碼短,好打常數小。
也是維護區間和之類的。

  • 二維偏序使用樹狀數組直接維護
  • 三維偏序用到CDQ分治,排序後直接使用樹狀數組維護。

字符串

聯賽算法KMP、trie等較簡單的算法,一般不考察AC自動機、後綴自動機…

  • KMP時間複雜度O(n),這點注意,利用nex數組的性質來做題。
  • trie可以較方便地讀入字符串免得用到hash這樣誤差大的東西
  • 單模hash
  • 雙模hash
  • hash思想可以用來做樹的同構等。
  • *manachar處理迴文串

做題策略分析

首先要做好心理準備,知道自己定下的目標,然後理清自己的計劃與思路。
不要太在意結果。法拉第說過一句話:“拼命去換取成功,但不希望一定會成功,結果往往會成功。”這就是成功的奧祕。

  • 前一天晚上要早點睡覺,養好精神,保持清醒的大腦。

  • 對於比賽,我們的目標是拿分,能夠拿到滿分當然最好,但是上手的第一步不應該直接想滿分怎麼做,而是儘可能地去得到最高的分。首先把能夠寫的部分分都寫出來(對於你無法在短時間內切的題),然後確保能夠拿到很多分的前提下再去思考、實現滿分做法,這樣能夠更好地確保能夠得到高分。

  • 根據數據範圍推測算法。
    如果忽略直接模擬和貪心模擬和優秀模擬這幾個算法的話,
    N<=10O(n!)N<=10:O(n!),全排列算法
    N<=12O(4n)Noip2017N<=12:O(4^n) 狀壓,如Noip2017的寶藏就有這麼做的
    N<=18O(3n)obeliskdpN<=18:O(3^n),狀壓,如一道叫obelisk的狀壓dp
    N<=20O(2n)N<=20:O(2^n),狀壓,應該不會考“是或不是”這種基礎搜索法
    N<=1e2O(n3)FloyddpN<=1e2: O(n^3),還可以帶一點常數,Floyd或者dp
    N<=1e3O(n2)dpN<=1e3: O(n^2),dp,圖論,
    N<=1e4(n2)N<=1e4:這是在告訴你(n^2)很容易被卡。
    N<=1e5O(nlog2n))lca,log2nN<=1e5:O(nlog_2n)),二分,數據結構,lca等(這個最常見了),log^2n也常見
    N<=1e6..1e7O(n)N<=1e6..1e7:O(n) ,數學方法,貪心
    N<=1e9:O(1)NmapN<=1e9: O(1),數學方法,貪心,或者不要考慮從N這裏下手,或者用上我們的好幫手map。
    各數據範圍之間可能會串通,靈活考慮。

  • 注意數組越界,需不需long long或高精度。
    注意刪掉無關輸出。
    注意讀入有沒有負數。
    注意文件操作。(freopen)

  • 注意時間,不要做着做着忘記時間。

  • 最後時刻:
    不建議搶最後的分
    先保證已寫的不意外丟分

  • NOIP考場真經二十條
     1、考前敲幾個常考的算法模版,提高準確率,找到好狀態。
     2、考前試機時要測試編程軟件是否正常,不要指望當天的監考老師能幫你解決。
     3、進入考場後,敲入必須要寫的代碼,比如:頭文件、main函數、文件讀入與輸出等。
     4、理論上可以用bits/stdc++.h頭文件,因爲最後評測是在NOI Linux上進行的。如果考場僅提供Windows系統,做題時就需要注意了。
     5、每年都有人因爲提交文件的目錄與命名規範爆零。要按要求建目錄!按要求命名!目錄結構不能錯!文件後綴名不能錯!大小寫不能錯!單詞拼寫不能錯!
     6、別人敲鍵盤很吵很快,別人一臉自信滿滿,別人在睡覺或玩遊戲,不能說明他就是大佬,他只是看不慣你拿一等獎而已,別理他。
     7、注意每道題的時間限制、空間限制、數據範圍,不能想當然。
     8、如果感覺題目很簡單,要注意了!很多選手都是栽在簡單題上!所以,對於簡單的題,一定要考慮全面。不要想都不想就開始寫,後來發現一些特殊數據要作特殊處理,改過來改過去,心情沒了,一等獎就沒了。
     9、如果感覺題目很難,要注意了!你拿一等獎的機會來了!這時候大家比的是:誰能穩得住?誰能多拿分?誰想都不想就放棄了?
     10、很多時候你是有能力做的,不要一看就怕了,沒有認真想就去騙分。經驗證明,很多題想到一定時候就會豁然開朗,並且很簡單。經驗多次證明,看起來很難的題往往很簡單,看起來很容易的題往往都有坑。
     11、多花點時間讀懂題,不是浪費時間。絕大多數“邊寫邊想”的人是拿不到多少分的,所以一定要真正讀懂題,想好了算法,理清了思路再編寫程序。
     12、多花點時間靜態查錯,不是浪費時間。即使是大佬,每次靜態查錯都可以找到變量帶錯的錯誤。特別是快排的i,j是否帶錯,++,–是否搞錯,循環變量出錯等等。
     13、多花點時間造測試數據,不是浪費時間。絕大多數沒測試、沒對拍的程序都不是正解,所以有時間不要胡思亂想,多測試!多測試!
     14、最後,對於實在找不到正解的題,一定要騙分,一定要寫小數據程序,輸贏往往就在這10分、20分。
     15、最後提交程序時,再次確認一下目錄結構和文件名是不是符合要求,再次確認一下文件讀入、輸出、關閉是否符合要求。
     16、認真讀題!認真讀題!積極思考!積極思考!
     17、讀懂了題目原意,再編程;寫下來關鍵變量,再編程;搞清楚時空限制,再編程;搞清楚數據範圍,再編程;理清楚算法思路,再編程;寫下來關鍵語句,再編程。
     18、編程後,查查變量對不對;編程後,看看樣例過不過;編程後,造些數據試一試;編程後,對拍一下看一看。
     19、先查編譯錯誤,然後靜態查錯;先測樣例數據,再測特殊數據。
     20、謀事在人,成事在天。參與第一,拿獎第二。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章