來自y總,為方便自己觀看而作。
一般ACM或者筆試題的時間限制是1秒或2秒。
在這種情況下,C++代碼中的操作次數(shù)控制在 $10^7 \sim 10^8$ 為最佳。
下面給出在不同數(shù)據(jù)范圍下,代碼的時間復雜度和算法該如何選擇:
$n \le 30$, 指數(shù)級別, dfs+剪枝,狀態(tài)壓縮dp
$n \le 100$ => $O(n^3)$,floyd,dp,高斯消元
$n \le 1000$ => $O(n^2)$,$O(n^2logn)$,dp算法的時間復雜性tn,二分,樸素版、樸素版Prim、-Ford
$n \le 10000$ => $O(n * \sqrt n)$,塊狀鏈表、分塊、莫隊
$n \le $ => $O(nlogn)$ => 各種sort,線段樹、樹狀數(shù)組、set/map、heap、拓撲排序、+heap、prim+heap、、spfa、求凸包、求半平面交、二分、CDQ分治、整體二分、后綴數(shù)組、樹鏈剖分、動態(tài)樹
$n \le $ => $O(n)$, 以及常數(shù)較小的 $O(nlogn)$ 算法 => 單調(diào)隊列、 hash、雙指針掃描、并查集,kmp、AC自動機,常數(shù)比較小的 $O(nlogn)$ 的做法:sort、樹狀數(shù)組、heap、、spfa
$n \le $ => $O(n)$,雙指針掃描、kmp、AC自動機、線性篩素數(shù)
$n \le 10^9$ => $O(\sqrt n)$,判斷質(zhì)數(shù)
$n \le 10^{18}$ => $O(logn)$,最大公約數(shù),快速冪算法的時間復雜性tn,數(shù)位DP
$n \le 10^{1000}$ => $O((logn)^2)$,高精度加減乘除
$n \le 10^{}$ => $O(logk \times ),k表示位數(shù)$,高精度加減、FFT/NTT