
ACM大一上寒假集训日记
文章平均质量分 60
Joanh_Lan
喜爱编程的菜菜,现学习算法与工程课。热爱code,喜欢分享个人学习经验与解题!
展开
-
简单差分入门
差分可以说是前缀和的逆运算了假设给你一个数组:arr[n] = {1,4,6,-1,8,...}给你m个操作:每次操作给你l,r,val,让你对数组l~r区间内的数都加上一个val朴素的做法(单次操作):for(int i = l,i<=r;i++)arr[i]+=val;时间复杂度为 r-l+1这样算下来整体的时间复杂度很大当朴素的暴力T的时候,就需要引进差分这一算法正如我开头说的:差分是前缀和的逆运算我们如何理解这句话呢?随便举一个例子:有一个数组:a原创 2022-01-22 13:29:03 · 674 阅读 · 2 评论 -
KMP算法(字符串匹配问题)acm寒假集训日记22/1/19
首先,先看一道例题:如果不考虑超时的话,我们完全可以用最朴素的方法(暴力)去求//暴力算法(n*m) int ViolentMatch(char *s,char *p){ int sLen = strlen(s); int pLen = strlen(p); int i = 0; int j = 0; while(i<sLen&&j<pLen) { if(s[i]==p[j]) { i++; j++; } else原创 2022-01-19 22:47:41 · 855 阅读 · 1 评论 -
矩阵问题入门(矩阵乘法and矩阵快速幂)acm寒假集训日记22/1/15
今天凌晨3点才睡,没想到通过看小说抑制玩游戏,反而看小说的时间更长。u1s1:那小说太刺激了,晚上看很有感觉,风吹草动我就会猛地看过去(类似茄子说柜子动了,哈哈),真TM(语气词)练胆量!!!..QvQ..接下来就是正题了!矩阵乘法说真的,一开始没有接触过这东西的我是懵逼的!矩阵乘法的条件:只有两个矩阵类:A(x*y) and B(y*z)才可以矩阵相乘,用人话来说:第一个矩阵的列(大小) 等于 第二个矩阵的行(大小)乘出来的矩阵C(x*z)...原创 2022-01-15 22:26:32 · 561 阅读 · 2 评论 -
扩展欧几里得exgcd算法 acm寒假集训日记22/1/12
数学证明ax + by = gcd(a,b)令gcd(a,b) = d得:ax + by = d ①因为:gcd(a,b) = gcd(b,a%b)所以:bx + a%b * y = dbx + (a-[a/b] * b) * y = d 注:[ ]是向下取整的意思整理得:bx + ay - [a/b] * by = day + b(x - [a/b] * y) = d ②由①和②得:1 . x = y2. y = x - [a/b] * y = x -...原创 2022-01-12 23:58:27 · 200 阅读 · 3 评论 -
【初学线段树,看这篇文章准没错】线段树(单点修改and区间修改)acm寒假集训日记22/1/10
线段树线段树是算法竞赛中常用的用来维护区间信息的数据结构。是一名ACMer 需要掌握的一种基础、重要的数据结构线段树可以在O(logN)的时间复杂度内实现单点修改,区间修改,区间查询(区间求和,区间最大值、最小值,区间gcd )等操作问题导入:给你一个数组a , 有m次操作我们现在有 $4$ 种操作:1. 询问【L,R】区间sum2. 询问【L,R】区间max3. 修改 a[pos] = new4. 给区间【L,R】区间每一个数都加上 x数组大小 1e5, m大小1e5(最后原创 2022-01-10 22:27:53 · 531 阅读 · 5 评论 -
最小生成树(Kruskal算法+Prim算法)简单讲解+最小生成树例题 acm寒假集训日记22/1/8
算法简讲部分:Kruskal算法:基于贪心策略大致过程分为第三步:1. 我们先用结构体把每条边的端点和权值记录下来,然后对每条边按权值进行排序2. 因为 使图连通最少需要n-1 条边,所以我们依次从小到大遍历所有的边,如果 该边的端点不在当前的连通分支中,则将其加入其中3. 当遍历到最后一条边或添加 边数 超过n-1时,结束遍历但还有一点要注意的,并不是每次算法得出的图都是连通的,如果边的数量没达到n-1就结束了遍历,即所有边都已经遍历完了,那我们所求的最小生成树是不存在的。参考代码:原创 2022-01-08 22:27:36 · 1802 阅读 · 6 评论 -
spfa(STL写法)简单讲解+最短路(spfa)例题 acm寒假集训日记22/1/7
前言:SPFA(Shortest Path Faster Algorithm)算法是求单源最短路线的一种算法,它是Bellman-ford的队列优化,它是一种十分高效的最短路算法。spfa 其实可以看作 Dijkstra + 队列 的优化知识储备:Dijkstra 与 队列spfa通过队列优化,可以减少不必要的relax(松弛)!本篇博客将以c++ STL写法实现spfa,当然您也可以通过结构体来实现(个人认为STL写法更加方便与简洁)!接下来——》直奔主题!!!如何存储信息原创 2022-01-07 12:39:36 · 336 阅读 · 2 评论 -
最少换乘(最短路+恶心的输入)acm寒假集训日记22/1/3 or 22/1/4
题目如下:AC代码如下:#include<iostream>#include<cstring>#include<cstdio>using namespace std;const int inf = 0x3f3f3f3f;const int N = 2009;int d[N][N];int dis[N];int vis[N];char s[N];int jl[N];int main()//目标1->n; { int t;.原创 2022-01-04 17:35:29 · 485 阅读 · 2 评论 -
G - A Bug‘s Life(并查集) acm寒假集训日记22/1/2
题目如下:原创 2022-01-02 20:36:12 · 361 阅读 · 2 评论 -
逛画展(单调队列) acm寒假集训日记22/1/1
题目如下:AC代码如下:#include<iostream>#include<cstdio>#include<algorithm>#include<list>#define inf 99999999/*其实O(n)就能做。对于一个数,我们维护它最后出现的位置p [ ] 。那么对于L~R(假设已经达到m种画都有),R+1时,至少一个数的p会被更新。那么如果这个左端点在这个区间中还有一个,即 L < p [ a [ L .原创 2022-01-01 20:45:32 · 435 阅读 · 2 评论 -
CodeForces - 1485B(找规律+求和) acm寒假集训日记21/12/31or22/1/1
题目如下:AC代码如下:#include<iostream>#include<algorithm>#include<cstring>#include<cstdio>#include<cmath>#define ll long longusing namespace std;int s[100009];int main(){ int n,q,k; cin>>n>>q>>k; f原创 2022-01-01 02:26:35 · 289 阅读 · 0 评论 -
Gym 102798A(思维) acm寒假集训日记21/12/31or22/1/1
题目如下:AC代码如下:#include<iostream>#include<algorithm>#include<cstring>#include<cstdio>#include<cmath>#define ll long longusing namespace std;char s1[30];char s2[30];int main(){ int T; scanf("%d", &T); w..原创 2022-01-01 01:52:31 · 250 阅读 · 0 评论 -
CodeForces 1506C(暴力求最长连续子串) acm寒假集训日记21/12/31or22/1/1
题目如下:AC代码如下:#include<iostream>#include<algorithm>#include<cstring>#include<cstdio>#include<cmath>#define ll long longusing namespace std;char s1[30];char s2[30];int main(){ int t; scanf("%d", &t); wh.原创 2022-01-01 00:58:01 · 147 阅读 · 0 评论 -
Dream City(01背包+小贪心)acm寒假集训日记21/12/30
因为每天都能长出bi枚金币,所以需要先进行一波小贪心!(bi大的最后再砍,这样收益才更高!)所以,先进行结构体排序,然后用01背包思想找到最优解!原创 2021-12-30 23:04:43 · 426 阅读 · 0 评论