跳转至

根据数据范围判断算法

蓝桥杯的评测机子和蓝桥云课的机子基本上一样的,速度大概在一秒 \(5\times 10^8\)

\(10^{18}\)

对单个数字的操作时间复杂度就只能在 \(O(1)\) 或者 \(O(\log)\)

如果是 \(O(1)\) 就说明这个题一定是一个数学题或者找规律题。

如果是 \(O(\log)\) 最大公约数是 \(\log\) 级别的算法,二分答案是 \(\log\times \text{check}\) 的算法。

算出一个数字的阶乘多少个因子(阶乘尾 0)

LL res=0;
while(x){
    res=res+x/5;
    x/=5;
}

如果有规律:则需要多分析很多数字来确认答案(暴力打表,看看哪些数字符合)

\(10^{12}\)

对单个数字的操作时间复杂度在之前的基础上,我们多了 \(\sqrt{N}\)

判断单个素数,枚举约数、分解质因数,数论分块(比较难)

\(10^{7}\)

\(O(n)\) 级别的算法。

枚举、前缀和(快速求出区间和)、差分(快速做区间修改)、双指针(快速求解区间问题)、栈(有特殊性质)、队列(有特殊性质)、并查集(不相交集合的并问题)、桶数组(值域要小)、unordered_map(无序哈希表,蓝桥杯很难被卡)、线性动态规划、字符串哈希(将字符串转换成数值快速判两个字符串是否相等)、BFS( \(O(n+m),点数+边数\)(解决最小操作次数问题,且每个操作代价相同)),随机数据下的 spfa

有一些特殊的链表题(将编号为 \(x\) 的移动到编号为 \(y\) 的节点前面或者后面)

\(10^{6}\)

\(O(n\log n)\)

排序(一个序列变得有序)、序列二分(有序序列中找到第一个 >=> 的第一个数字)、素数筛法(求解 \(1\sim n\) 中的素数、线段树(区间修改、区间查询)、最小生成树 \((\text{n 个点 n-1 条边的最小路径})\)、Dijkstra(求 \(1\sim n\) 的最短路)、优先队列(取出序列中的最值)

\(2\times 10^{5}\)

\(O(n\sqrt{n})\)

分块(被线段树平替了)

\(10^4\)

\(O(n^2)\)

二维前缀和(求出以 \(x_1,y_1\) 为左上角,\(x_2,y_2\) 为右下角子矩阵的和)、二维差分(对 \(x_1,y_1\) 为左上角,\(x_2,y_2\) 为右下角子矩阵进行快速修改)

背包问题

\(500\)

\(O(n^3)\)

Floyd(求出任意两点之间的最短路)

矩阵乘法(优化动态规划)

DFS

20

搜索

子集枚举 \(O(n\times 2^n)\):列出一个序列的全部子序列、选或不选、删或不删

组合型枚举 \(O(\dfrac{2^n}{\sqrt{n}})\):列出一个序列中选出 \(k\) 个数字的全部方案

12

全排列 \(n\times n!\):将一个序列的全部排列输出

还有一些其他的搜索方式,具体要看实现。