一般ACM或者笔试题的时间限制是1秒或2秒。
在这种情况下,C++代码中的操作次数控制在 10710810^7\sim 10^8 为最佳。

由数据范围反推算法复杂度以及算法内容

下面给出在不同数据范围下,代码的时间复杂度和算法该如何选择:

数据范围 时间复杂度 算法
n30n\le 30 指数级别 dfs+剪枝、状态压缩dp
n100n\le 100 O(n3)O(n^3) floyd、dp、高斯消元
n1000n\le 1000 O(n2)O(n^2) dp、二分、朴素版dijkstra、朴素版Prim、Bellman-Ford
n10,000n\le 10,000 O(nn)O(n\cdot \sqrt n) 块状链表、分块、莫队
n100,000n\le 100,000 O(nlogn)O(n\cdot logn) 各种sort、线段树、树状数组、set/map、heap、、拓扑排序、dijkstra+heap、prim+heap、Kruskal、spfa、求凸包、求半平面交、二分、CDQ分治、整体二分、后缀数组、树链剖分、动态树
n1,000,000n\le 1,000,000 O(n)O(n)
常数较小的O(nlogn)O(n\cdot logn)
单调队列、 hash、双指针扫描、并查集,kmp、AC自动机
sort、树状数组、heap、dijkstra、spfa
n10,000,000n\le 10,000,000 O(n)O(n) 双指针扫描、kmp、AC自动机、线性筛素数
n109n\le 10^9 O(n)O(\sqrt n) 判断质数
n1018n\le 10^{18} O(logn)O(logn) 判断质数最大公约数,快速幂,数位DP
n101000n\le 10^{1000} O((logn)2)O((logn)^2) 高精度加减乘除
n101000,000n\le 10^{1000,000} O(logk×loglogk)O(logk\times loglogk) k表示位数 ,高精度加减、FFT/NTT

参考:

  1. yxc.由数据范围反推算法复杂度以及算法内容

  2. 松鼠爱葡萄.第七章 时空复杂度分析 笔记