一些技巧&套路&注意事項 (持續更新)

前言:

比賽做題其實有很多的技巧和套路,還有一些奇奇怪怪需要注意的地方。

在這裏,我就根據自己的經驗來寫一寫。

 

這會是一個很大的坑。

等着以後慢慢填吧。

 

雖然說這主要是寫給自己看的,

但還是希望大家看完後覺得好的點個贊。

 

正文:

1、求[l..r]方案數的一般都是轉化爲[1..r]-[1..l-1]。

 

2、c++很少會給你報錯,所以要自己注意數組是否會越界,要不要開long long。

 

3、一些神奇的思維轉換,比如說不能的個數=總數-能的個數。

 

4、打二分時要多調試幾遍。

 

5、比賽時注意題目難度,一般第一題要努力想正解,第二題、第三題就盡力拿部分分。

 

6、比賽時注意時間分配,一般做一題最好不要超過一個小時,想不到正解就打暴力。

 

7、一些看上去超時的搜索在加上剪枝後能拿到很多分甚至能切掉,所以搜索要儘量打剪枝。

 

8、只要有區間覆蓋的,都應該想一想差分。

 

9、不要主觀臆斷一個算法會超時,有些東西真的很玄學。

 

10、注意數據範圍內那些奇怪的特殊數據,有時用它們來打表也可以得分,相反不注意這些的話打了正解也可能失分。

 

11、c++中位運算的優先級很低,所以最好加括號。

 

12、做題要多看幾遍題目,想做法時樣例要先弄懂。

 

13、有些要取模的題在卡常時可以隔幾個去一次模,因爲取模真的很慢。

 

14、調用數組也比較慢,至少比直接用變量慢,所以卡常時能用變量就別調用數組。

 

15、在要重複執行很多次的程序段中,最好要打得能優則優,能簡則簡,因爲有時可能一個符號就決定你超不超時。

 

16、數組整體賦值(c++的memset,pascal的fillchar)要比用循環去賦值快一些,但也是需要較多的時間,所以能減則減。

 

17、在空間允許的情況下,不要吝嗇開long long耗費的空間,感覺數值可能比較大就開long long,即使在你的估計中它不會超過2^31-1,畢竟你可能會估算錯。

 

18、遇到實數類型就直接用double(pascal的extended),以防被卡精度。

 

19、線段樹空間要開4n。也就是說100000個數你要開到400000的空間來存。

 

20、數據很大好像只能O(1)過的一般都是公式結論題,推不出公式可以打個暴力來找規律。

 

21、數組大小很神奇,不一定是數據越小就越快。有一次同樣的程序我數組開到[1001][1001]比開到[42][22]要快很多,差不多快了整整半秒,而且重複提交多次也一樣。

22、循環比較慢,所以能用一個循環做完的東西就不要分到兩個循環做,儘量在一個循環裏做完。有時還可以考慮這樣優化一個1到n的循環:

for (int i=1;i<=n;i+=16)
{
    一次性做完i到i+15的東西。
}

這樣就減少了循環次數,也是一種卡常。

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