一般acm或者筆試題的時間限制是1秒或2秒。
在這種情況下,c++**中的操作次數控制在 107∼108107∼108 為最佳。
下面給出在不同資料範圍下,**的時間複雜度和演算法該如何選擇:
n≤30n≤30, 指數級別, dfs+剪枝,狀態壓縮dp
n≤100n≤100 => o(n3)o(n3),floyd,dp,高斯消元
n≤1000n≤1000 => o(n2)o(n2),o(n2logn)o(n2logn),dp,二分,樸素版dijkstra、樸素版prim、bellman-ford
n≤10000n≤10000 => o(n∗n√)o(n∗n),塊狀鍊錶、分塊、莫隊
n≤100000n≤100000 => o(nlogn)o(nlogn) => 各種sort,線段樹、樹狀陣列、set/map、heap、拓撲排序、dijkstra+heap、prim+heap、kruskal、spfa、求凸包、求半平面交、二分、cdq分治、整體二分、字尾陣列、樹鏈剖分、動態樹
n≤1000000n≤1000000 => o(n)o(n), 以及常數較小的 o(nlogn)o(nlogn) 演算法 => 單調佇列、 hash、雙指標掃瞄、並查集,kmp、ac自動機,常數比較小的 o(nlogn)o(nlogn) 的做法:sort、樹狀陣列、heap、dijkstra、spfa
n≤10000000n≤10000000 => o(n)o(n),雙指標掃瞄、kmp、ac自動機、線性篩素數
n≤109n≤109 => o(n√)o(n),判斷質數
n≤1018n≤1018 => o(logn)o(logn),最大公約數,快速冪,數字dp
n≤101000n≤101000 => o((logn)2)o((logn)2),高精度加減乘除
n≤10100000n≤10100000 => o(logk×loglogk),k表示位數o(logk×loglogk),k表示位數,高精度加減、fft/ntt
由資料範圍反推算法複雜度以及演算法內容
一般acm或者筆試題的時間限制是1秒或2秒。在這種情況下,c 中的操作次數控制在 107為最佳。下面給出在不同資料範圍下,的時間複雜度和演算法該如何選擇 n 30,指數級別,dfs 剪枝,狀態壓縮dp n 102 o n3 floyd,dp n 103 o n2 o n2logn dp,二分 n 1...
由資料範圍反推算法複雜度以及演算法內容
一般acm或者筆試題的時間限制是1秒或2秒。在這種情況下,c 中的操作次數控制在 下面給出在不同資料範圍下,的時間複雜度和演算法該如何選擇 n 30,指數級別,dfs 剪枝,狀態壓縮dp n 100 o n 1000 o n 10000 o n n 100000 o nlogn 各種sort,線段樹...
由資料範圍反推算法複雜度以及演算法內容
一般acm或者筆試題的時間限制是1秒或2秒。在這種情況下,c 中的操作次數控制在 107107 為最佳。下面給出在不同資料範圍下,的時間複雜度和演算法該如何選擇 n 30n 30,指數級別,dfs 剪枝,狀態壓縮dp n 100n 100 o n3 o n3 floyd,dp n 1000n 100...