摘要: \(Question:\) 给定一个模式串P和一个主串S, 求模式串P在主串S中出现的位置(字符串下标均从1开始) \(Solution:\) 模式串中 next 函数 next[i] 表示模式串 P[1, i]中相等前后缀的最长长度 运用双指针:i 扫描模式串, j 扫描前缀 初始化 ne[1] 阅读全文
posted @ 2024-09-04 21:51 懒羊羊爱吃灰太狼 阅读(9) 评论(0) 推荐(0)
摘要: Dijkstra(迪杰斯特拉)算法是基于贪心思想的单源最短路算法 暴力 Dijkstra 具体如下: struct node { int v, w; }; vector<node> e[N]; int dist[N], vis[N]; e[u] 存的是节点 u 的所有出边的终点和边权,dist[u] 阅读全文
posted @ 2024-08-21 18:41 懒羊羊爱吃灰太狼 阅读(28) 评论(0) 推荐(0)
摘要: 拓扑排序(所有点按照先后顺序排成序列) 注:图必须是有向无环图 Kahn (卡恩) 算法 核心思想:用队列维护一个入度为0的节点的集合 具体代码如下: vector<int> e[N], tp; int din[N]; e[x] 用来存点 x 的邻点,tp 存拓扑序列,din[x] 用来存点x的入度 阅读全文
posted @ 2024-08-20 11:02 懒羊羊爱吃灰太狼 阅读(32) 评论(0) 推荐(0)
摘要: 判断一个数是不是质数,最基础的方法: bool isprime(int n) { if(n <= 1) return 0; for(int i = 2; i <= sqrt(n); i ++) { if(n % i == 0) return 0; } return 1; } 这个方法虽然能判断是不是 阅读全文
posted @ 2024-08-17 17:43 懒羊羊爱吃灰太狼 阅读(15) 评论(0) 推荐(0)
摘要: 求快速幂的两种方法: 第一种: ll fastpow(ll a,ll b) //快速幂(时间复杂度为o(logn)) { if(b == 1) return a; ll temp = fastpow(a, b / 2); if(b % 2 == 1) return temp * temp % mod 阅读全文
posted @ 2024-08-17 17:15 懒羊羊爱吃灰太狼 阅读(12) 评论(0) 推荐(0)
摘要: 逆元用于求 $ \frac{a}{b} (mod\ p)$ 的结果 第一种方法:拓展欧几里得 利用拓欧求解同余方程:\(a*x ≡ c\ (mod\ b)\) 的 \(c = 1\) 的情况 就可以转化成求解 \(a*x+b*y=1\) 这个方程 void exgcd(ll a,ll b,ll &x 阅读全文
posted @ 2024-08-10 09:44 懒羊羊爱吃灰太狼 阅读(17) 评论(0) 推荐(0)
摘要: 解决\(RMQ(Range\ Minimum/Maximum\ Query)\) 即区间最值查询问题 \(RMQ\)算法一般用较长时间做预处理, 时间复杂度为\(o(nlogn)\), 然后可以用\(o(1)\)的时间解决每一次查询 预处理部分 我们设二维数组 \(dp[i][j]\) 表示从第\( 阅读全文
posted @ 2024-07-30 21:46 懒羊羊爱吃灰太狼 阅读(16) 评论(0) 推荐(0)
摘要: 时间复杂度 \(o(nlogn)\) 空间复杂度 \(o(n)\) 模板: #include <bits/stdc++.h> using namespace std; const int N = 1e5 + 10; int n; int a[N], b[N]; // 合并 void merge(in 阅读全文
posted @ 2024-07-24 15:12 懒羊羊爱吃灰太狼 阅读(7) 评论(0) 推荐(0)
摘要: 一般用于单点修改,区间查询 模板: const int N = 1e6 + 10; int tree[N]; int lowbit(int x) { return x & -x; } void add(int x, int k) { // 修改 while(x <= n) { tree[x] += 阅读全文
posted @ 2024-05-13 18:29 懒羊羊爱吃灰太狼 阅读(14) 评论(0) 推荐(0)
摘要: 简单的自我理解 阅读全文
posted @ 2024-03-18 23:09 懒羊羊爱吃灰太狼 阅读(42) 评论(0) 推荐(0)