关于模拟题的一些弱鸡总结
首先要感謝某位不知名大佬(當(dāng)時沒關(guān)注博客事后找不到了。。。)給了我很大的啟發(fā),然后本弱雞在此寫一下關(guān)于模擬題的一些個人見解(大佬求輕踩_(:з」∠)_)。
眾所周知,模擬題在ACM比賽中主要屬于簽到或銅牌層次的題,銀牌模擬題并不多見。模擬題考點主要在思路,代碼能力以及細(xì)節(jié)應(yīng)對能力,而這幾項在銀牌題中大多由構(gòu)造題來考查。構(gòu)造題就是另一種東西了,構(gòu)造題比模擬題費(fèi)腦子多了我這個弱雞就不摻和了。
模擬題的考點分析下發(fā)現(xiàn)其實就一個——細(xì)節(jié)。因為考慮下什么是所謂的代碼能力?打比賽的隊伍肯定有一個寫代碼能力最強(qiáng)的代碼手,各隊之間的代碼手的能力或許有差距,但其實都遠(yuǎn)超過了模擬題的要求了。無非就是有的大佬STL用的更NB一點,但ACM模擬題涉及到的東西都是大家都會的,沒聽說過什么模擬題是必須要會某個STL才能過的。這里的代碼能力其實說的是寫代碼的習(xí)慣問題。寫過項目的肯定都明白,寫的時候?qū)幙啥嘁槐豆ぷ髁恳惨汛a寫的粗淺簡約,注釋絕對不會少加,否則一旦出BUG基本上就等著重寫吧(因為重寫比DEBUG快多了)。當(dāng)然,我不是說比賽時代碼要寫的跟項目一樣,畢竟比賽差一秒可能就是兩種牌了,但根據(jù)個人能力適度調(diào)整寫代碼的規(guī)范程度絕對是有幫助的,尤其是對于模擬題來說。至于思路就更明顯了,模擬題的思路其實就是“如何去實現(xiàn)”,思路的第一步是先確定一個可行的宏觀的做法,但大多模擬題的做法都有很多,這就衍生了第二步——優(yōu)化思路,使你的思路更容易實現(xiàn),這也是我這篇總結(jié)的主要內(nèi)容。到這里我們可以發(fā)現(xiàn)其實更優(yōu)的思路和更強(qiáng)的代碼能力所產(chǎn)生的好處就是使你需要考慮的細(xì)節(jié)更少。這也是很多人不明白為啥一道題這么多隱藏細(xì)節(jié)需要考慮大佬卻總是能在幾分鐘就寫完還一發(fā)AC,一方面是大佬見多識廣啊,其次很多時候大佬的方法或者方法實現(xiàn)與我們不一樣,根本不會產(chǎn)生那些問題或者可以規(guī)避掉這些坑點。
模擬題雖然多種多樣沒有模板可以一篇概全,但也不是無跡可尋,程序是服務(wù)于需求這一主旨在模擬題上體現(xiàn)的最是淋漓盡致。很多模擬題的背景以及要求都是我們生活中遇到過的功能,甚至“模擬四個人打麻將”這種功能我們也能在麻將游戲中用到。因此模擬題其實有很多類似的可以劃分為一類,進(jìn)而根據(jù)分類可以總結(jié)出針對的模板思路,以下就是我個人總結(jié)的一點思路。
1:單詞型。
這一類模擬題的要求是對一些一段一段的被分隔符分開的字符串進(jìn)行處理。典型的就是給你篇文章讓你對其中的句子或單詞進(jìn)行各種處理,這種的分割符往往是空格,逗號和句號。有時候給你的是整個長串,這種你往往可以通過選定某個字符為分隔符或者手動添加來進(jìn)行分割。這類題的思路一般是先把“單詞”提取出來,然后按照題目要求進(jìn)行處理,最后再按照要求拼接回去。因為這類題中可處理的目標(biāo)一般就兩種——單詞和分隔符,而提取和合并的過程都不容易出錯,對單對象處理也不容易出錯,所以這樣寫可以減少很多邏輯和代碼的細(xì)節(jié)錯誤。
例題:Gym - 101190A Abbreviation
2:多單位型。
這一類模擬題背景往往是許多單位(不一定是人)在某些規(guī)則下進(jìn)行活動,要求往往是輸出最后或者中間某階段的各單位狀態(tài)或活動結(jié)果。典型的就是幾個人在一起玩游戲,告訴你初始狀態(tài)讓你模擬出最后誰贏了。這種題的思路一般是把每個單位都獨(dú)立化每個單位都是獨(dú)立的個體,每個單位相關(guān)的數(shù)據(jù)都用一個單獨(dú)的結(jié)構(gòu)體或者數(shù)組保存,每個單位的行動也要獨(dú)立考慮。然后根據(jù)題目的背景我們可以建立各單位間的影響關(guān)系,這時候要考慮的一般主要是兩點——當(dāng)前單位進(jìn)行行動會對哪些單位產(chǎn)生影響,有哪些單位會影響當(dāng)前行動的單位。簡單一點的題中各單位對各單位的影響都是對稱的,稍難一點的題中各單位對各單位的影響往往是不對稱的甚至是會變化的。
例題:2018ICPC北京網(wǎng)絡(luò)賽C題 Cheat
3:數(shù)據(jù)結(jié)構(gòu) and STL型。
這一類模擬題背景和功能描述往往非常接近某種數(shù)據(jù)結(jié)構(gòu)或者STL。這種題的思路一般是我們在對應(yīng)的數(shù)據(jù)結(jié)構(gòu)或者STL的基礎(chǔ)上再去修改往往更加簡單明了。
例題:HihoCoder - 1383 北京賽區(qū)(2016)網(wǎng)絡(luò)賽——The Book List
4:其他。
如果是要求比較簡單明顯的模擬題大家肯定都會,如果遇到有些感覺很復(fù)雜難以理清關(guān)系的模擬題,那么可以嘗試直接暴力實現(xiàn)。典型的就是涉及某種語言的程序的運(yùn)行,出題人肯定不會指望每個出題人都是能開發(fā)一種語言的巨巨,這種時候我們直接暴力實現(xiàn)加上暴力判斷往往就能過。
例題:2018青島ICPC網(wǎng)絡(luò)賽C題 Halting Problem
本人一弱雞,不敢說什么做遍模擬題,模擬題有很多,這上面只是我個人見的模擬題中比較多的幾類,有其他類的靠大佬們來總結(jié)了。
(最后高喊:蘿莉百合賽高~!?(^?^*))
總結(jié)
以上是生活随笔為你收集整理的关于模拟题的一些弱鸡总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 快速傅里叶变换 java_二维快速傅里叶
- 下一篇: md5验证文件上传,确保信息传输完整一致