acm
Capsfly
这个作者很懒,什么都没留下…
展开
-
【数据结构课设】:后缀树
概述 后缀树,就是把一串字符的所有后缀保存并且压缩的字典树。相对于字典树来说,后缀树并不是针对大量字符串的,而是针对一个或几个字符串来解决问题。比如字符串的回文子串,两个字符串的最长公共子串等等。 性质:一个字符串构造了一棵树,树中保存了该字符串所有的后缀。 操作:就是建立和应用。 (1)建立后缀树 比如单词banana,它的所有后缀显示到下面的。0代表从第一个字符为起点,终点不用说都是字符串的末尾。 以上面的后缀,我们建立一颗后缀树。如下图,为了方便看到后缀,我没有合并相同的前缀。 前面简介原创 2022-05-18 09:39:51 · 2309 阅读 · 0 评论 -
单调栈的性质
单调栈的用途:用来寻找左边第一个小于当前值的元素单调栈的性质:若栈中有第i个和第j个元素,且j>i,则在(i,j)范围内的任何数字k必有a[i]<a[j]<a[k]单调栈的性质:若栈中有第i个和第j个元素,且j>i,则在(i,j)范围内的任何数字k必有a[i]<a[j]<a[k]单调栈的性质:若栈中有第i个和第j个元素,且j>i,则在(i,j)范围内的任何数字k必有a[i]<a[j]<a[k]利用这个性质我们就可以寻找左边的第一个元素了。首先看一.原创 2022-03-29 23:02:50 · 348 阅读 · 0 评论 -
【第一周补题】:切蛋糕
问题可以简化成有一个 n×n×nn\times n \times nn×n×n大小的正方体,以一个顶点为原点建立三维坐标系,以相连接的三条棱为三个坐标轴。假设切蛋糕的刀面,必定与三个坐标轴(x,y,zx , y ,zx,y,z)之一垂直。现在知道了每一刀切下去的方向和刀面距离原点的距离,你要做的就是帮 shyshyshy 算出每一刀切完之后,最大蛋糕块的体积。提示:题目中的蛋糕可以认为是刚体,切割蛋糕不会造成任何损失。#include <bits/stdc++.h>using name原创 2022-03-09 14:09:12 · 696 阅读 · 0 评论 -
板子dijskra[离散数学复习]
void dijkstra(int s){ memset(st, false, sizeof(st)); for(int i = 1; i <= n; i++) dist[i] = INF; dist[s] = 0; st[s] = true; for(int i = 2; i <= n; i++){ int mind = INF, v = s; for(int j = 1; j <= n; j++){原创 2021-05-11 22:23:01 · 95 阅读 · 0 评论 -
2021CSPT2
试题编号: 202104-2试题名称: 邻域均值时间限制: 1.0s内存限制: 512.0MB问题描述: 试题背景顿顿在学习了数字图像处理后,想要对手上的一副灰度图像进行降噪处理。不过该图像仅在较暗区域有很多噪点,如果贸然对全图进行降噪,会在抹去噪点的同时也模糊了原有图像。因此顿顿打算先使用邻域均值来判断一个像素是否处于较暗区域,然后仅对处于较暗区域的像素进行降噪处理。问题描述待处理的灰度图像长宽皆为 个像素,可以表示为一个 大小的矩阵 ,其中每个元素是一个 范围内的整数,表示对应位置原创 2021-04-20 18:22:52 · 470 阅读 · 1 评论 -
gcd算法证明&&递归终止条件证明
gcd算法需要注意两件事情1.算法的正确性。答:证明如上2.算法的终止条件的证明(为什么终止条件一定是b==0?)答:原创 2021-04-16 14:35:26 · 378 阅读 · 0 评论 -
费马定理与裴蜀定理
原创 2021-03-28 14:37:14 · 95 阅读 · 0 评论 -
欧拉筛法
欧拉筛法需要解决几个问题:1.每个素数都会被留下;答:显然。2.每个合数都会被去掉(且只去掉一次);答:设n=k * prime[ j ],当i枚举到n的时候筛掉了n * prime[j+1],n * prime[ j+1]=k * prime[ j ]*prime[ j+1],这个时候的最小质因数为prime[j],如果我们这个时候不break,当我们枚举到k * prime[j+1]的时候,也会再次筛一次,这个时候break的话可以保证只筛了一次。而且根据分解定理,合数一定可以被分解为.原创 2021-03-16 19:28:24 · 455 阅读 · 0 评论 -
约数个数
给定n个正整数ai,请你输出这些数的乘积的约数个数,答案对109+7取模。输入格式第一行包含整数n。接下来n行,每行包含一个整数ai。输出格式输出一个整数,表示所给正整数的乘积的约数个数,答案需对109+7取模。数据范围1≤n≤100,1≤ai≤2∗109输入样例:3268输出样例:12#include<bits/stdc++.h>using namespace std;long long res=1;const int mod=1e9+7;int n,原创 2021-03-06 22:38:53 · 553 阅读 · 0 评论 -
今天也是scy菜鸡的一天(最小生成树
题目描述又到了一年一度的明明生日了,明明想要买BB样东西,巧的是,这BB样东西价格都是AA元。但是,商店老板说最近有促销活动,也就是:如果你买了第II样东西,再买第JJ样,那么就可以只花K_{I,J}KI,J 元,更巧的是,K_{I,J}KI,J 竟然等于K_{J,I}KJ,I 。现在明明想知道,他最少要花多少钱。输入格式第一行两个整数,A,BA,B。接下来BB行,每行BB个数,第II行第JJ个为K_{I,J}KI,J 。我们保证K_{I,J}=K_{J,I}原创 2021-03-06 16:06:47 · 82 阅读 · 0 评论 -
最小生成树与二分图
在边数很多(与n^2)一个级别的时候,用朴素版prim,否则用kruskal;匈牙利算法也叫渣男算法原创 2021-03-05 22:33:51 · 62 阅读 · 0 评论 -
匈牙利算法(渣男算法
给定一个二分图,其中左半部包含n1个点(编号1n1),右半部包含n2个点(编号1n2),二分图共包含m条边。数据保证任意一条边的两个端点都不可能在同一部分中。请你求出二分图的最大匹配数。二分图的匹配:给定一个二分图G,在G的一个子图M中,M的边集{E}中的任意两条边都不依附于同一个顶点,则称M是一个匹配。二分图的最大匹配:所有匹配中包含边数最多的一组匹配被称为二分图的最大匹配,其边数即为最大匹配数。输入格式第一行包含三个整数 n1、 n2 和 m。接下来m行,每行包含两个整数u和v,表示左半部原创 2021-03-05 22:24:48 · 149 阅读 · 0 评论 -
染色法判定二分图
给定一个n个点m条边的无向图,图中可能存在重边和自环。请你判断这个图是否是二分图。输入格式第一行包含两个整数n和m。接下来m行,每行包含两个整数u和v,表示点u和点v之间存在一条边。输出格式如果给定图是二分图,则输出“Yes”,否则输出“No”。数据范围1≤n,m≤105输入样例:4 41 31 42 32 4输出样例:Yes思路:从每一个点出发开始染色都没有矛盾#include<bits/stdc++.h>using namespace std;int原创 2021-03-05 21:39:06 · 107 阅读 · 0 评论 -
Kruskal算法求最小生成树
给定一个n个点m条边的无向图,图中可能存在重边和自环,边权可能为负数。求最小生成树的树边权重之和,如果最小生成树不存在则输出impossible。给定一张边带权的无向图G=(V, E),其中V表示图中点的集合,E表示图中边的集合,n=|V|,m=|E|。由V中的全部n个顶点和E中n-1条边构成的无向连通子图被称为G的一棵生成树,其中边的权值之和最小的生成树被称为无向图G的最小生成树。输入格式第一行包含两个整数n和m。接下来m行,每行包含三个整数u,v,w,表示点u和点v之间存在一条权值为w的边。原创 2021-03-05 21:05:56 · 458 阅读 · 0 评论 -
prim算法求最小生成树
给定一个n个点m条边的无向图,图中可能存在重边和自环,边权可能为负数。求最小生成树的树边权重之和,如果最小生成树不存在则输出impossible。给定一张边带权的无向图G=(V, E),其中V表示图中点的集合,E表示图中边的集合,n=|V|,m=|E|。由V中的全部n个顶点和E中n-1条边构成的无向连通子图被称为G的一棵生成树,其中边的权值之和最小的生成树被称为无向图G的最小生成树。输入格式第一行包含两个整数n和m。接下来m行,每行包含三个整数u,v,w,表示点u和点v之间存在一条权值为w的边。原创 2021-03-05 19:47:36 · 596 阅读 · 0 评论 -
spfa算法注意事项
终于来到SPFA算法了!之前已经说明过了Bellman_ford算法 ,我们今天说明的SPFA算法仅仅只是对该算法的一个优化。Bellman_ford算法会遍历所有的边,但是有很多的边遍历了其实没有什么意义,我们只用遍历那些到源点距离变小的点所连接的边即可,只有当一个点的前驱结点更新了,该节点才会得到更新;因此考虑到这一点,我们将创建一个队列每一次加入距离被更新的结点。值得注意的是st数组的作用:判断当前的点是否已经加入到队列当中了;已经加入队列的结点就不需要反复的把该点加入到队列中了,就算此次还是转载 2021-03-05 10:45:12 · 231 阅读 · 1 评论 -
有边数限制的最短路(Only can be solved by bellman___ford
给定一个n个点m条边的有向图,图中可能存在重边和自环, 边权可能为负数。请你求出从1号点到n号点的最多经过k条边的最短距离,如果无法从1号点走到n号点,输出impossible。注意:图中可能 存在负权回路 。输入格式第一行包含三个整数n,m,k。接下来m行,每行包含三个整数x,y,z,表示存在一条从点x到点y的有向边,边长为z。输出格式输出一个整数,表示从1号点到n号点的最多经过k条边的最短距离。如果不存在满足条件的路径,则输出“impossible”。数据范围1≤n,k≤500,1原创 2021-03-05 09:32:57 · 170 阅读 · 1 评论 -
heap优化dijkstra
给定一个n个点m条边的有向图,图中可能存在重边和自环,所有边权均为非负值。请你求出1号点到n号点的最短距离,如果无法从1号点走到n号点,则输出-1。输入格式第一行包含整数n和m。接下来m行每行包含三个整数x,y,z,表示存在一条从点x到点y的有向边,边长为z。输出格式输出一个整数,表示1号点到n号点的最短距离。如果路径不存在,则输出-1。数据范围1≤n,m≤1.5×105,图中涉及边长均不小于0,且不超过10000。输入样例:3 31 2 22 3 11 3 4输出样例:3原创 2021-03-04 23:52:57 · 169 阅读 · 1 评论 -
图论入门
朴素版djskra:稠密图 边数多时候用m和n2一个级别是稠密图稠密图:二维数组 储存稀疏图:临阶表原创 2021-03-04 20:48:38 · 124 阅读 · 2 评论 -
菜鸟入门拓扑排序
给定一个n个点m条边的有向图,点的编号是1到n,图中可能存在重边和自环。请输出任意一个该有向图的拓扑序列,如果拓扑序列不存在,则输出-1。若一个由图中所有点构成的序列A满足:对于图中的每条边(x, y),x在A中都出现在y之前,则称A是该图的一个拓扑序列。输入格式第一行包含两个整数n和m接下来m行,每行包含两个整数x和y,表示存在一条从点x到点y的有向边(x, y)。输出格式共一行,如果存在拓扑序列,则输出任意一个合法的拓扑序列即可。否则输出-1。数据范围1≤n,m≤105输入样例:原创 2021-03-04 16:03:16 · 197 阅读 · 1 评论 -
字符串哈希(五年oi一场空,不开ull见祖宗
字符串哈希题目提交记录讨论题解视频讲解给定一个长度为n的字符串,再给定m个询问,每个询问包含四个整数l1,r1,l2,r2,请你判断[l1,r1]和[l2,r2]这两个区间所包含的字符串子串是否完全相同。字符串中只包含大小写英文字母和数字。输入格式第一行包含整数n和m,表示字符串长度和询问次数。第二行包含一个长度为n的字符串,字符串中只包含大小写英文字母和数字。接下来m行,每行包含四个整数l1,r1,l2,r2,表示一次询问所涉及的两个区间。注意,字符串的位置从1开始编号。输出.原创 2021-03-03 19:15:23 · 197 阅读 · 1 评论 -
哈希算法——填坑法
维护一个集合,支持如下几种操作:“I x”,插入一个数x;“Q x”,询问数x是否在集合中出现过;现在要进行N次操作,对于每个询问操作输出对应的结果。输入格式第一行包含整数N,表示操作数量。接下来N行,每行包含一个操作指令,操作指令为”I x”,”Q x”中的一种。输出格式对于每个询问指令“Q x”,输出一个询问结果,如果x在集合中出现过,则输出“Yes”,否则输出“No”。每个结果占一行。数据范围1≤N≤105−109≤x≤109输入样例:5I 1I 2I 3Q 2Q原创 2021-03-02 22:21:04 · 249 阅读 · 0 评论 -
并查集进阶及一些nt错误及变量命名规范
食物链题目提交记录讨论题解视频讲解动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形。A吃B, B吃C,C吃A。现有N个动物,以1-N编号。每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种。有人用两种说法对这N个动物所构成的食物链关系进行描述:第一种说法是”1 X Y”,表示X和Y是同类。第二种说法是”2 X Y”,表示X吃Y。此人对N个动物,用上述两种说法,一句接一句地说出K句话,这K句话有的是真的,有的是假的。当一句话满足下列三条之一时,这句.原创 2021-03-01 22:24:05 · 88 阅读 · 0 评论 -
手写trie的注意事项
原题维护一个字符串集合,支持两种操作:“I x”向集合中插入一个字符串x;“Q x”询问一个字符串在集合中出现了多少次。共有N个操作,输入的字符串总长度不超过 105,字符串仅包含小写英文字母。输入格式第一行包含整数N,表示操作数。接下来N行,每行包含一个操作指令,指令为”I x”或”Q x”中的一种。输出格式对于每个询问指令”Q x”,都要输出一个整数作为结果,表示x在集合中出现的次数。每个结果占一行。数据范围1≤N≤2∗1e4输入样例:5I abcQ abcQ abI原创 2021-02-28 22:30:53 · 63 阅读 · 0 评论 -
单调栈的nt理解
acwing 830给定一个长度为N的整数数列,输出每个数左边第一个比它小的数,如果不存在则输出-1。输入格式第一行包含整数N,表示数列长度。第二行包含N个整数,表示整数数列。输出格式共一行,包含N个整数,其中第i个数表示第i个数的左边第一个比它小的数,如果不存在则输出-1。数据范围1≤N≤1051≤数列中元素≤109输入样例:53 4 2 7 5输出样例:-1 3 -1 2 2看的时候不太理解,后来相出来一种思路,对于如果i<j&&a[j]<a[i原创 2021-02-24 22:45:24 · 108 阅读 · 0 评论