一般ACM或者筆試題的時間限制是1秒或2秒。
在這種情況下,C++代碼中的操作次數控制在 爲最佳。
下面給出在不同數據範圍下,代碼的時間複雜度和算法該如何選擇:
n ≤ 30, 指數級別, dfs+剪枝,狀態壓縮dp
n ≤ 100 => O(),floyd,dp
n ≤ 1000 => O(),O(logn),dp,二分
n ≤ 10000 => O(n∗),塊狀鏈表
n ≤ 100000 => O(nlogn) => 各種sort,線段樹、樹狀數組、set/map、heap、dijkstra+heap、spfa、求凸包、求半平面交、二分
n ≤ 1000000 => O(n), 以及常數較小的 O(nlogn) 算法 => hash、雙指針掃描、kmp、AC自動機,常數比較小的 O(nlogn) 的做法:sort、樹狀數組、heap、dijkstra、spfa
n ≤ 10000000 => O(n),雙指針掃描、kmp、AC自動機、線性篩素數
n ≤ => O(),判斷質數
n ≤ => O(logn),最大公約數