这个帖主要是用来在考前临时抱佛脚一下CSP-S可能会考的知识点
一.二分
记得排序哦。
毋庸置疑的O(logn)级别。
祝你度过1e5难关。
运用范围:S组考的话大概率是单个二分答案/融入形态二分查找。
二分查找:
lower_bound uppper_bound 自行使用。
lower_bound(a+1,a+1+n,x)。
二分答案:
需要一点小小巧思。
需要掌握非预制菜版本的二分。
经典:最大的最小,最小的最大,好多区间找值。
例题:https://leetcode.cn/problems/split-array-largest-sum/
二.贪心
主播不会。
三.freopen
一错全错系列。
freopen("1.in","r",stdin);
freopen("1.out","w",stdout);
四.对拍系列
贪心的好帮手,拿分的好伙伴(背刺版)
知识点提取来自亲爱的董老师-RegenFallen。
你需要几个代码:
1.有些几率错的代码-solve
2.有些几率对的代码-std(一定对)
3.一个数据生成器-data
4.一个拍子-随便叫啥
你需要自己提供前三个代码,第四个代码基本成型。
solve:
std:
data:
duipai:
请记住这个随机数生成器:
srand(time(0));
int a=rand()%10;
五.单调队列
这是一个经常与其他算法抱团出现的算法。
常常用来优化。
大概是从60pts->100pts的变化。
详情可见-勇者比太郎系列
用双端队列deque实现。初始化O(n),使用O(1)。
用来查询区间最小值/最大值(但必须滑动窗口类型,不能动态)
六.最短路系列
O(logn)就找Dijkstra。
建议不要找SPFA。
容易被卡。
O(n^3)就找FLOYD(这个其实是动态规划)。
七.ST表
用来查询动态区间最值。
时间复杂度:O(nlogn)级别。
相比单调队列,它的优点在于它是一个可以动态查询的算法。
但是它的时间复杂度也比单调队列高。
运用了倍增的思想。
详情请见:ACGO-忠诚。
八.双指针
能排序的记得排序哦。
神秘的O(n)级别选手。
不过要是做错了可能要调试好久。
建议谨慎使用。
九.前缀和&差分
差分其实很难考虑到吧……
主要还是前缀和。
前缀和,优化的小帮手,拿分的好伙伴(永不被刺版本)
十.你是否拥有一双敏锐的双眼?
对于(只)想要拿S1的选手来说。
其实最重要的不是去学更高级的算法。-摘自《洛谷》
首先T1你得写出来吧(根据这两年的难度)
那么剩下的就是拼暴力,
拼完暴力,拼优化。
注意注意注意:请选择合适的优化方案。
要有区间隔离哦。
不然暴0就等着哭吧。
T1也是。
特别是贪心/数学类的T1.
十一.树状数组