算法模板
主要记录一些算法细节
b_b_lai_lai
学啥啥不会
展开
-
最短路Dijkstra算法
** 1.P1144 最短路计数 ** 题目链接 #include <algorithm> #include <cstdio> #include <cstring> #include <iostream> #include <queue> #define maxn 1000000 + 1 #define maxn1 4000000 + 1 #define mod 100003 using namespace std; inline int qr原创 2021-05-16 22:32:07 · 118 阅读 · 0 评论 -
A*算法
** 1.[SCOI2005]骑士精神 ** 题目链接 #include <algorithm> #include <cstdio> using namespace std; char ss[10]; bool bk; int v[6][6], ans; int dx[8] = {1, 1, -1, -1, 2, 2, -2, -2}; int dy[8] = {2, -2, 2, -2, 1, -1, 1, -1}; const int ed[6][6] = {{0, 0, 0原创 2021-05-11 22:40:28 · 63 阅读 · 0 评论 -
数位dp
1. 不要62(数位dp) #include <cstdio> #include <cstring> #include <iostream> #include <string> using namespace std; typedef long long ll; int a[20]; int dp[20][2]; int dfs(int pos, int pre, int sta, bool limit) { //limit是表示前一位是否为上限位原创 2021-04-20 22:58:46 · 78 阅读 · 0 评论 -
石子合并(一)(直线相邻)(区间dp)
#include <algorithm> #include <cstdio> #include <cstring> #include <queue> using namespace std; #define mst(a, b) memset((a), (b), sizeof(a)) typedef long long ll; const int maxn = 205; const ll mod = 1e9 + 7; const ll INF = 1e18;原创 2021-04-01 17:24:22 · 49 阅读 · 0 评论 -
洛谷P3808 【模板】AC自动机(简单版)
#include <bits/stdc++.h> #define N 500010 using namespace std; // typedef long long ll; inline int read() { int x = 0, f = 1; char c = getchar(); while (c < '0' || c > '9') { if (c == '-') f = -1; c = get原创 2021-03-28 16:09:37 · 45 阅读 · 0 评论 -
快速幂
inline long long fastPower(long long base, long long power) { long long result = 1; while (power > 0) { if (power & 1) {//此处等价于if(power%2==1) result = result * base % 1000; } power >>= 1;//此处等价于power转载 2021-03-16 21:07:53 · 41 阅读 · 0 评论 -
背包DP
给定一个重量限制,和几种不同物品的价值和重量,每种物品只有一个,寻找能拿到的最大价值是多少 01背包问题根本指的是,同种物品有且最高只有一个,在给定限制下,如何获得最大收益 枚举:找出所有组合 关键的状态转移方程如下: #include<iostream> //正常情况下cin和cout的I/O效率远不如stdio.h中的函数 using namespace std; const int maxn = 1000; int dp[20][20]; int value[20],weight[20转载 2021-03-16 14:34:06 · 88 阅读 · 0 评论 -
P3391 【模板】文艺平衡树(模板题)(fhq treap)
fhq treap 难点在于理解merge函数和split函数,这些通过手算模拟可以很好地抓住要点,其次就是要理解pushdown函数里面的交换结点,正是这个动作转换了区间,还有比较难理解的就是按照merge函数的建树(小根堆)规则可以使树的中序遍历刚刚好就是原序列。 fhq treap: #include <algorithm> #include <cstdio> #include <cstring> #include <iostream> #include原创 2021-03-05 14:27:25 · 92 阅读 · 0 评论 -
洛谷P3369 【模板】普通平衡树
替罪羊树: #include <bits/stdc++.h> #define N 100000 using namespace std; int n, st, rt, cnt, tot, cur[N + 5], Void[N + 5]; // rt就是根节点,st就是当前节点 const double alpha = 0.75; //关联因子 struct Scapegoat { int Son[2], Exist, Val, Size, Fac; //原创 2021-03-01 17:09:28 · 151 阅读 · 0 评论 -
read()快读和快写
普通的快读: inline void read(int &x) {//开实参,要使读入的值在里面发生变化 x=0; //如果对实参不了解的可以改为int类型的,最后return也可以 int f=1;//这个是用来判断正负的标志 char s=getchar();//读入每一个空行、空格和数字 while(s<'0'||s>'9') {//读入空格和换行阶段 if(s=='-')//表明这个数是负数转载 2021-03-01 17:04:46 · 316 阅读 · 0 评论 -
字符串hash
普通字符串hash 看这里 二维hash(矩阵) 看这里转载 2021-02-23 21:53:22 · 41 阅读 · 0 评论 -
最小公倍数和最大公约数
最大公约数 int divisor(int a, int b) { int temp; //比较两个数的大小,值大的数为a,值小的数为b if (a < b) { temp = a; a = b; b = temp; } //求余 while (b != 0) { temp = a % b; a = b; b = temp; } return a; } 最小公倍数 //辗转相除法求最大公约数函数 int divisor(int a, int b) {转载 2021-02-21 16:40:04 · 46 阅读 · 0 评论 -
SPFA 算法
链接地址转载 2020-10-12 16:15:30 · 54 阅读 · 0 评论 -
Dijkstra算法(转载)
链接转载 2020-10-03 13:07:26 · 80 阅读 · 0 评论 -
C++ pair的基本用法总结(转载)
链接地址转载 2020-10-03 13:03:24 · 83 阅读 · 0 评论 -
FLoyd算法(最短路径问题)
算法链接转载 2020-09-30 10:46:41 · 242 阅读 · 0 评论