整理
业界良心整理
近期的学习计划和任务
准备学的
- K-D tree
- treap+可持久化
- 圆方树
- 斯坦纳树
- 双联通分量
- 费用流消圈算法
- 线段树优化的建图(单源最短路)(1)(2)
- DP的题目(30/130)
- 省选准备BLOG
- +1/-1的RMQ+LCA+笛卡尔树
- 画图论的图的好网站IN
复习内容
知识清单 密码hpxx【Orz】【请勿随便转载】
线性筛各种东西(素数,欧拉,莫比乌斯)
莫比乌斯反演分块法
Tarjan的一类算法(缩环,缩点,连通块,lca)
字符串内容(后缀自动机etc…….
计算几何内容
link_cut_tree(对于子树的操作)
可并堆左偏树
SCOI2016的幸运数字的点分治版本
树形dp,图论的知识,01规划,点分治,树剖,LCT
还没打过的模板
- P3387
- P3810
- P4238
- P4245
- P3835
- P3380
知识点
- 字符串的内容:
- 后缀类
- 后缀数组
- 后缀自动机
- 广义后缀自动机
- 匹配类
- kmp和exkmp
- AC自动机
- LCP
- LCS
- 回文类
- Manacher算法
- 回文树
- 其他类
- 最大(小)表示法
- 哈希
- 字典序
- 后缀类
- 图论:推荐友链文章
- 最大流
- 普通的增广路算法
- EK算法
- ISAP算法
- Dinic算法
- 最高标号预推流算法HLPP
- 有上下界的最大流
- 最小割
- 最小割最大流定理
- 最小费用最大流
- SPFA算法(LLL+SFL)优化
- Bellman-Ford
- zkw
- 0-1规划图论部分
- 最大密度子图
- 最优比率环
- 费用流消圈算法
- 最大点权独立集(二分图和其他)
- 最小点权覆盖集(二分图和其他)
- 最大权闭合子图
- 最短路
- Floyd算法
- SPFA算法
- Dijistra算法
- k短路的A-star算法
- 数据结构优化建图法
- 生成树
- 最小生成树
- prim
- Kruskal
- 次小生成树(LCA+Kruskal)
- 动态最小生成树
- 最大生成树
- k小生成树
- 最小生成树
- 二分图匹配
- 最大流源点汇点法
- KM算法(匈牙利算法)
- 2-Sat
- k-SAT
- 联通分量
- 暴力
- Tarjan
- 双联通分量
- 点双
- 边双
- 强连通分量(Tarjan)
- 桥和割点
- 关键路
- 拓扑排序
- 欧拉(回)路
- 哈密顿环(最小哈密顿环 广度优先 深度优先 爬山法 分支界限法)
- 最小树形图
- 朱刘算法
- 最大(小)瓶颈路 tm
- 其他
- 最近公共祖先
- 倍增法
- Tarjan法
- 并查集推荐文章
- 路径压缩
- 带权并查集
- 可持久化并查集
- 逆向并查集
- 种类并查集
- 动态并查集
- SPFA判断负环(深搜版的SPFA)
- 差分约束
- 对偶图
- 最近公共祖先
- 最大流
- 数论:
- 欧几里得算法Gcd和Exgcd
- 逆元
- 费马小定理
- 扩展欧几里得定理
- 欧拉定理
- 容斥原理
- 莫比乌斯反演
- FFT/NTT
- 高斯(约旦)消元法
- 复数
- 卢卡斯定理
- 欧拉定理
- 莫比乌斯函数
- 欧拉函数
- 微积分
- 洛必达法则
- 牛顿逼近法
- 牛顿迭代法
- 公式
- 斐波那契数列
- 模拟法
- 递归法
- 卡特兰数列
- 排列组合
- 公式法
- 低精度直接套公式
- 取模求逆元或用卢卡斯定理
- 递推法
- 杨辉三角 C[i][j]=C[i−1][j]+C[i−1][j−1](C[1][1]=1,C[x][0]=1) C [ i ] [ j ] = C [ i − 1 ] [ j ] + C [ i − 1 ] [ j − 1 ] ( C [ 1 ] [ 1 ] = 1 , C [ x ] [ 0 ] = 1 )
- 等差等比数列
- 求和
- 求第几项
- 线性筛
- 素数
- 欧拉函数
- 莫比乌斯函数
- 中国剩余定理(孙子定理)
- 矩阵乘法加法,快速矩阵乘法strassen算法
- 线性基
- 分圆多项式
- 裴蜀定理
- 杜教筛
- stirling 公式(n!的近似值)
- 数据结构
- 树状数组(bit-tree或Fenwick树)
- 二维树状数组
- 堆
- 大根堆
- 小根堆
- 系统自带的堆(set)
- 斐波那契堆
- 配对堆
- 可并堆
- 二叉树
- 普通的二叉索引树
- splay
- 红黑树
- AVL树
- SBT
- treap
- 旋转式
- 非旋式
- 线段树好文章 2 3 4Good
- 主席树
- zkw线段树
- 二维线段树
- 扫描线
- 离散化和动态开点
- Trie树
- 树套树
- 替罪羊树
- 虚树
- 树链剖分
- 竞赛树
- st-table
- 哈夫曼树(编码k位)
- 圆方树
- 斯坦纳树
- 可持久化数据结构
- link_cut_tree
- K-D tree
- O-C tree
- 矩阵树
- euler tour tree
- Frederickson’s topology tree
- 可并堆
- 左偏树(Leftist Tree)
- 二项堆(Binomial Heap)
- Fibonacci堆(Fibonacci Heap)
- top—tree
- 树状数组(bit-tree或Fenwick树)
- self-adjust top tree
- DP(动态规划)
- 普通线性DP
- 拓扑序的DP
- 树上的树形DP
- 期望和概率的DP
- 状压DP
- 插头DP(轮廓线的描述)
- 数位DP
- 其他算法+DP
- 矩阵优化
- 斜率优化
- 数据结构优化
- 数论优化
- 滚动数组
- 四边形优化
- 背包问题
- 普通背包
- 有限背包
- 完全背包
- 无限背包
- 多条件多限制背包(潜水员)
- 可持久化的背包(U16816 最后的战役)
- 记忆化搜索
- 分治
- 二分(线性函数)
- 三分(有凸性的函数)
- 整体二分
- CDQ分治
- 点分治
- RMQ分块
- 莫队算法+树上莫队
- 计算几何
- 二维
- 向量
- 点积叉积
- 基本函数
- 凸包
- 旋转卡壳
- 半平面交
- 判断点在多边形内
- SPLG平面区域
- 圆
- 对偶图
- 增量随机算法
- 三维
- 向量
- 点积叉积
- 球
- 二维
- 博弈论
- SG函数
- minimax search
- alpha-beta剪枝
- 尼姆博弈
- 巴什博弈
- 威佐夫博奕
- 约瑟夫环(问题)
- 推荐文章
- 神经网络
- sigmoid函数
- Relu函数
- softplus函数
- thanh函数
- softmax函数
- 其他
- 模拟退火
- 爬山算法
- 差分(树上或其他)
- 自动机
- 有限状态
- 排序
- 冒泡排序
- 计数排序
- 选择排序
- 基数排序
- 归并排序
- 快速排序
- 系统自带sort
- 哈希
- 字符串的hash
- 离散化的hash
- 模拟
- 暴力,搜索(DFS)
- 迭代
- 高精度算法
- 加法
- 高精度非负数加法
- 高精度整数加法
- 高精度小数加法
- 减法
- 高精度非负数减法
- 高精度整数减法
- 高精度小数减法
- 乘法
- 整数:
- 高精度乘以低精度
- 高精度乘以高精度(FFT)
- 高精度小数乘法
- 整数:
- 除法
- 整数高精度除以低精度保留余数
- 整数高精度除以低精度保留余数
- 小数高精度除法
- 高精幂
- 高精阶乘
- 高精开根*
- 压位高精
- 加法
- 逆序对
- DP法
- CDQ动态逆序对
- 树套树动态逆序对
- 栈
- k维偏序
- 进制转换
- 启发式合并
- 覆盖问题
- 随机函数,随机求取概率
- 数据分类分块,黑白染色
- Goldreich-Levin 算法 VFK的WC2015T2
- MD5 算法
- STL(C++)
- set
- vector
- map
- queue
- list
- pair
- bitset
- pb_ds
- stack
程序优化
- 读入输出优化
inline int read()
{
int X=0,w=1; char ch=0;
while(ch<'0' || ch>'9') {if(ch=='-') w=-1;ch=getchar();}
while(ch>='0' && ch<='9') X=(X<<3)+(X<<1)+ch-'0',ch=getchar();
return X*w;
}
inline void write(int x)
{
if(x<0) putchar('-'),x=-x;
if(x>9) write(x/10);
putchar(x%10+'0');
}
void get(int &x)
{
char c = getchar(); x = 0;
while(c < '0' || c > '9') c = getchar();
while(c <= '9' && c >= '0') x = x*10+c-48, c = getchar();
}
void put(int x)
{
int num = 0; char c[15];
while(x) c[++num] = (x%10)+48, x /= 10;
while(num) putchar(c[num--]);
putchar('\n');
}
cin.sync_with_stdio(false);
std::ios::sync_with_stdio(false);//cin读入优化;
- 手动开栈
#include<cstdlib>
#include<stdlib.h>
#pragma comment(linker, "/STACK:102400000,102400000")//开栈 1G
int size=20<<20;
char *x=(char*)malloc(size)+size;
__asm__("movl %0,%%esp\n"::"r"(x));//手动开栈32M
- Ox优化
#pragma GCC optimize(2)//O2
#pragma GCC optimize(3)//O3
- 快速头文件
#include<bits/stdc++.h>
- 流输入输出&fread
inline char nc(){
static char buf[100000],*p1=buf,*p2=buf;
return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;
}//读入字符
#include<iostream>
namespace Read
{
const int S = 1 << 20;
char frd[S], *ihed = frd + S;
const char *ital = ihed;
inline char inChar()
{
if (ihed == ital)
fread(frd, 1, S, stdin), ihed = frd;
return *ihed++;
}
inline int get()
{
char ch; int res = 0; bool flag = false;
while (!isdigit(ch = inChar()) && ch != '-');
(ch == '-' ? flag = true : res = ch ^ 48);
while (isdigit(ch = inChar()))
res = res * 10 + ch - 48;
return flag ? -res : res;
}
char fwt[S], *ohed = fwt;
const char *otal = ohed + S;
inline void outChar(char ch)
{
if (ohed == otal)
fwrite(fwt, 1, S, stdout), ohed = fwt;
*ohed++ = ch;
}
inline void put(int x)
{
if (x > 9) put(x / 10);
outChar(x % 10 + 48);
}
};//借鉴的他人的我自己从来没用过
- 输出输入文件上交OJ时防止忘删
#ifndef ONLINE_JUDGE
freopen("test.in","r",stdin);
freopen("test.out,"w",stdout);
#endif
- 多组数据一键生成
char filein[20];
int main()
{
for(int finum=1;finum<=M;finum++){
sprintf(filein,"name%d.in",finum);
freopen(filein,"w",stdout);
out();
fclose(stdin);
}
return 0;
}//数据生成,out()为自己写的数据生成函数,M为最大组数
char fileans[20],filein[20];
int main()
{
for(int finum=1;finum<=M;finum++){
sprintf(filein,"name%d.in",finum);
sprintf(fileans,"name%d.out",finum);
freopen(filein,"r",stdin);
freopen(fileout,"w",stdout);
work();
fclose(stdin);
fclose(stdout);
}
return 0;
}//数据答案生成,work()为你的标准程序
- 对拍bat(批处理)代码
//创建一个后缀为.bat的文件然后在里面写入如下代码
//不要注释部分
set num=0 //设置对拍多少组,可以不要
:st //开始位置
outout.exe //数据生成器的exe文件
std.exe //标程的exe文件
your.exe //你的程序的exe文件
fc ans.out your.out //答案和你的输出比较
set /a num+=1 //将num++,若想拍无限组就不要这句
if "%num%"=="10" goto end //这句是限制只拍10组
if %errorlevel%==0 goto st //没有错就继续
pause //有错就暂停
:end //结束位置