Day1
https://oi-wiki.org/math/number-theory/sieve/
字符串哈希https://oi-wiki.org/string/hash/
进制转换https://oi-wiki.org/math/base/
高精度https://oi-wiki.org/math/bignum/
逆元https://zhuanlan.zhihu.com/p/449221995?utm_id=0
Day2
STL(很重要,必须要熟悉其用法)
queue,priority_queue,deque
stack
map,set
vector
关于STL的迭代器
deque <int> D ; deque <int> :: iterator it ; for( it = D.begin() ; it != it.end() ; ++ it )
不能直接使用迭代器相加减算出对应元素下标
deque<int> Q ; int len = Q.end-Q.begin() ;
要查看对应STL的迭代器是否支持++,+,- 操作(一般只支持++)
priority_queue 存结构体,需要重载运算符
struct node { int to , w ; node( int To , int W ) { to = To , w = W ; } } bool operator < ( const node &a , const node &b ) { return a.w > b.w ; } void Prim() { priority_queue<node>Q ; Q.push( node(Start,dis[Start]) ); }
或者用pair,pair的first第一关键字,second 第二关键字
#define LL long long #define PLL pair<LL,LL> priority_queue<PLL,vector<PLL>,greater<PLL>> Q ; // PLL 存储类型 // vector 底层实现的容器类型 // greater<PLL> 排序方式及排序的元素类型 Q.push(make_pair(a,b));
Day3
模拟(后面补)
Day4
二分(后面补)
二分主要可以分为二分查找和二分答案(都要求序列满足单调性)
二分查找就大致是再一串序列中二分查找第一个大于常数x的元素
二分答案——答案满足单调性,二分答案,再把答案带入验证
Day5
贪心
邻项交换法
详细论述:
浅谈邻项交换排序的应用以及需要注意的问题 - ouuan的博客
简易理解:【流水调度问题】【邻项交换对比】【Johnson法则】洛谷P1080国王游戏/P1248加工生产调度/P2123皇后游戏/P1541爬山...-CSDN博客
进一步看 无后效性 , 最优子结构
关于流水调度:【动态规划】流水作业调度问题与Johnson法则_johnson规则寻找最优时间表-CSDN博客
简单的例题:牛牛叠罗汉(题解及邻项交换法解析:临项交换贪心例题-CSDN博客)
Day6
图与搜索算法
有向图
无向图
欧拉路径
欧拉回路
环
回路
路径
DFS深度优先搜索
BFS宽度优先搜索
Day7
拓补排序,最短路
拓补排序
最短路
SPFA(可以有负边,能处理负环)
Dijstkra+堆优化(无负边)
void Dijkstera() { priority_queue< PLL , vector<PLL> , greater<PLL> > Q ;//用的pair bool vis[N] ;//表示已处理完成的集合 memset( vis , 0 , sizeof(vis) ); dis[1] = 0 ;//到起始点距离为0 Q.push( make_pair(dis[1],1) ) ;//放入 while( !Q.empty() ) { int x = Q.top().second ;//取出 Q.pop() ; vis[x] = 1 ;//标记为已最优化集合 for( int i = 0 ; i < G[x].size() ; ++ i ) { int son = G[x][i].second , w = G[x][i].first ; if( vis[son] ) continue ;//如果发现子节点已是最优化,就不再放入Q if( dis[son] > dis[x]+w ) {//能松弛 dis[son] = dis[x]+w ;//松弛 Q.push(make_pair(dis[son],son)) ;// 松弛后尝试松弛其子节点 } } } }
这里的vis与SPFA不同,Dj 的vis表示该点是否已经有最优最短路,有了就不用松弛
Dijstkra的最优子结构性相较于SPFA更明显,用到贪心的思想更好理解
Day8(后面补)
双指针,前缀和
前缀和:一维前缀和,二维前缀和,多为前缀和
差分
Day9(后面补)
单调栈,单调队列
Day10(后面补)
动态规划入门
Day11(后面补)
并查集和最小生成树