![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
模板学习
文章平均质量分 53
模板
qq_34026804
这个作者很懒,什么都没留下…
展开
-
处理斜率问题
如果需要储存斜率或者判断一点是否在一条直线上,可以用向量储存斜率(如(x1-x0,y1-y0))此前提是要化简,即除去gcd,并且应对象限进行处理,如(-3,4)和(3,-4)是否在一条直线上,就需进行判断如果x<0的话可将x,y直接进行变号用set存储(set自动去重)例题:消灭老鼠#include<iostream>#include<algorithm>#include<set>using namespace std;typedef pair&原创 2022-03-06 19:26:05 · 762 阅读 · 0 评论 -
KMP模板
next[i]数组的含义:若next[i]=j 则表示为下标为i的字符其最长前后缀为j,并且规定next[1]=0;匹配的过程:假设s[ ]为模板串 (较长) p[ ]为模式串(较短),当s[i]!=p[j+1]时,也就是j+1之后不配对但1~j+1时符合,此时挪动模式串至next[j],因为此时j的next[j]保存的是以j结尾的前后缀长度,所以只需要将模板串从next[j]开始匹配即可。求next[ ]模板for (int i = 2, j = 0; i <= n; i ++ )原创 2021-09-08 22:17:19 · 73 阅读 · 0 评论 -
记忆化搜索(模板题)
滑雪dfs做法(超时)#include<iostream>#include<algorithm>using namespace std;const int N=310;int r,c;int h[N][N];int dx[]={0,1,0,-1};int dy[]={1,0,-1,0};int dfs(int x,int y){ int cnt=1; int max_cnt=0; for(int i=0;i<原创 2021-03-31 20:20:10 · 267 阅读 · 0 评论 -
树状数组学习(例题及题解)
树状数组:可以动态维护前缀和,查询时间复杂度O(log2n),修改时间复杂度O(log2n)。树状数组记录前缀和的方式为这个数的二进制表示中从长度是从右往左的第一个0的大小,即长度为x-lowbit(x)+1。代码模板int tr[N];int lowbit(int x) //求第一个0的位置{ return x & -x;}void add(int x, int c) 在位置为x的地方加上c{ for (int i = x; i <= n; i += .原创 2021-03-24 21:25:06 · 379 阅读 · 0 评论 -
最长上升子序列优化(贪心o(nlogn))
最长上升子序列贪心思路将每个上升子序列结尾元素的最小值存储下来,在计算长度时中只需在q数组中二分查小于此元素(假设为a[i])的最大数值即可,此时位序+1即为本数的最长上升lenth大小。代码模板#include <iostream>#include <algorithm>using namespace std;const int N = 100010;int n;int a[N];int q[N];int main(){ scanf("%.原创 2021-03-04 20:33:53 · 120 阅读 · 1 评论 -
背包九讲(1)
对于背包问题的状态表示:F[i,j]通常表示为对于不超过i个物品,背包容量不超过j的最大价值n表示物品数量,m表示背包容量。01背包问题01背包问题代码模板 for(int i=1;i<=n;i++) for(int j=0;j<=m;j++) { f[i][j]=f[i-1][j]; if(j-v[i]>=0) f[i][j]=max(f[i][j],f[i-1][j-v[i]]+w[i]);原创 2021-02-11 16:19:16 · 87 阅读 · 0 评论 -
数论学习(1)
质数概念:质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。如何判定质数?代码模板 时间复杂度O(sqrt(n))bool is_prime(int x) (试除法){ if (x < 2) return false; for (int i = 2; i <= x / i; i ++ ) if (x % i == 0) return false; return true;}因为因数总是成对出现的,原创 2021-02-04 22:17:33 · 458 阅读 · 0 评论 -
acwing学习笔记
差分作用: 用O(1)的时间复杂度完成对区间[l,r]加上c。思路:如要完成对a数组中的区间完成次操作,则需要构造辅助数组b来完成,b数组的实际含义为 b的前缀和为a(a3=b1+b2+b3)。例:一维差分如何构造差分数组构造差分数组在建立a数组时即可完成for(int i=1;i<=n;i++){ cin>>a[i] ; insert(i,i,a[i]);//相当于每次在i位置加上a[i]}如何完成区间加减void insert(int l,i原创 2021-01-26 21:05:19 · 740 阅读 · 0 评论