- 博客(23)
- 收藏
- 关注
原创 acwing5579 增加模数
我开始翻看题解,发现2024年提供的题解基本上就是我这个模板,但是ctrl+c/v过来的情况就是现在都TLE了,我猜测这个题目之后的数据应该是加强了,但我确实不知道在哪里优化了,于是又翻看了两个2025年的题解,发现其中说到:大量运算时 尤其是%运算 *运算 long long 的开销会高于 int 会更耗时,m < 45000 也就是运算时最多只是44999 * 44999。和a=(long long)a*a%p;结果又是TLE,而且这次只剩下6个答案来不及输出出来!
2025-05-17 14:24:14
774
原创 2025.5.17 字符串hash
输入长度为n的字符串 有m个询问每次有四个参数,l1,r1,l2,r2。求每次[l1,r1]和[l2,r2]所包含的子串是否相等,时的话输出yes,不是no。
2025-05-17 11:58:31
251
原创 2035.5.15 并查集
同时除了完成并查集两个这种最基础的操作,它还支持在完成基础操作的过程中维护一些额外的白变量,比如每个集合的元素数量大小。一开始有n个数,后面有n1个合并集合操作,n2个查询两个元素是否在同一个集合操作。下面代码题意与上面相同,只不过多了n3个查询元素a所在集合的元素数量的操作。2.判断两个元素是否属于同一个集合。
2025-05-15 21:18:19
489
原创 2035.5.14 trie字典树
用到Trie树的字符串一般都是大写或者都是小写,或者都是数字,或者是01(反正不会有很多种字符)输入n1和n2,分别表示存入n1个字符串和查询n2次字符串,每次查询都输出该字符串存储了几次。字典树是一种高效快速存储和查询字符串的数据结构,形态上为一个多叉树。
2025-05-14 21:31:43
409
原创 2025.5.13 单调队列
在一个序列中,有一个长度为k的滑动窗口,从左到右滑动,从第k个数开始,每次滑动之后都输出这个窗口中的最大值和最小值。应用场景十分有限,由于本人当前能力限制,本条博客就只更新其最经典的应用:滑动窗口。如果对你有帮助请给一个免费的赞吧,蟹蟹(❁´◡`❁)如果后序有新的应用我会持续更新的。
2025-05-13 22:46:39
242
原创 2025.5.13 单调栈
单调栈用于在一个序列中,求出每一个数在其左边(右边)第一个比它小(大)的数,由于我们能发现对于每个元素最多进栈一次,最多出栈一次,那么最多是2n。所以时间复杂度是o(n)如果要算右边的大/小版本,只需要先开个数组先将数据存进去,然后用for倒序循环数组,逻辑与左边一致。
2025-05-13 22:04:52
532
原创 2025.5.13 一维前缀和/二维前缀和 一维差分/二维差分
二维前缀和:s[i][j]=s[i][j-1]+s[i-1][j]-s[i-1][j-1]+a[i][j] s[x2][y2]-s[x1-1][y2]-s[x2][y1-1]-s[x1-1][y1-1]而查分是前缀和的逆运算,用于快速对某个区间的数全都加上一个数c。一维前缀和:s[i]=s[i-1]+a[i]前缀和用于快速求出区间和 时间复杂度o(1)
2025-05-13 20:36:41
145
原创 区间合并的应用:格子染色(2019美团面试题)
其实我一开始是用的离散化再加上二维前缀和做的,我将每个点的的x,y值都进行离散化,虽然避免了开一个2e9*2e9的数组,但是离散化后的a数组也需要2e5*2e5理所当然的MLE了,虽然后面想想我这个离散化后从根本上就是错误的,因为离散化后的数组并不能将原本线段的重合给还原出来。后面看了题解才发现,要用到二维的区间合并,然后再判重。与一维的区间合并不同的就是要在每个区间的存储时加上其行号/列号。以下是具体ac代码:时间复杂度是o(n**2),n是1e4。
2025-05-13 13:32:49
689
1
原创 2025.5.12 区间和并
这里给定n个区间,如果有交集的区间就合并为一个大区间,让你求合并完之后总共有多少个区间,其实就是用了区间的左端点排序。最后注意往函数中传递vector记得加上&引用符号防止发生拷贝降低效率。
2025-05-12 16:36:39
177
原创 2025.5.12 实现离散化求解区间和(有解析)
我们将所有需要离散化的下标都存入vector中(包括区间下标),对其进行sort(升序),然后再进行去重,最后每个下标离散化的值就是其在vector中的下标,因为它们在vector中的下标就是0~n-1,那么我们就能通过在vector进行二分查找找到该元素下标,确定它在vector中的下标,我们就得到其离散化的值了。我在写的时候也有这个疑问,但是我最后发现,a中只会在元素下标进行离散化的地方存储值,至于中间夹杂着区间离散化下标的位置,a中存储的就是0。离散化其实就是一种特殊的哈希(hash)
2025-05-12 13:38:40
392
原创 2025.5.11 实现高精度乘法 与 高精度除法
高精度除法:需要注意消除前导0,且为了输入输出与前面三个法则的一致性,div函数中从vector中取数的顺序可能不一样,而且为了配合输出最后的结果vector还需要reverse一下(虽然有点多此一举....)高精度乘法:需要注意t还有剩余,要全部push_back到结果vector上。
2025-05-11 22:32:27
294
原创 2025.5.10 实现整数二分 和 实数(浮点数)二分
这里的例子是给出一个double数,用使出二分求出其平方根。整数二分(有非常多的边界问题)
2025-05-10 14:06:17
147
原创 2025.5.9 手动实现归并排序
而归并排序的归并则需要归并的两段序列是已经有序的,这就需要先递归到最小可解决子问题然后再进行进一步归并,故递归代码在归并代码前面,并且归并代码用到了双指针算法。两个排序都用到了分治思想(divide and conquer)快速排序依赖前一次的排序来进一步进行排序 故排序代码在其递归前。
2025-05-09 22:29:53
233
原创 Linux学习初步记录
5.i节点(inode)是文件系统中一个非常重要的概念,在Linux系统中,每个文件或者目录都有一个唯一的i节点它存储了文件的元数据信息(包括1.文件类型 2.权限 3.所有者 4.文件大小 5.时间戳[文件的创建时间,最后访问时间和最后的修改时间] 6.数据块指针),系统也是通过这个i节点来识别文件的,硬链接与原始文件共享相同的i节点,也就说明它们共享相同的文件内容(显示存储大小与源文件相同),源文件和硬链接实际上是同一个文件的不同两个名字。别人的自行车我随便蹬嘛xd,还可以一键复原,何乐而不为。
2025-04-24 22:14:08
608
原创 关于acwing 拐杖糖盛宴的做题记录
2.如果a[i]<b[j],那么这头牛每次身高都会翻倍,最大翻30次,就可以达到1e10这个数量级,之后每次的糖第一个到它就一定能在第一次吃完,时间复杂度都是o(1)。这种情况下最有可能跑满o(m*n),但真的跑得满吗,答案时肯定不行,如果能跑满1e10那么任何优化都会超时,知道这点可以让我们怎么说放心点吧(雾)本人首先看到题目n,m都是1e5级别,直觉来看暴力解决就是o(m*n)时间复杂度是1e10级别。这个级别就算是o(n)都没有办法解决 o(n)能解决的数据量在1e8。
2025-04-09 16:30:05
172
原创 关于acwing 农夫约翰最喜欢的操作的做题记录
所以我们将所有的ai%m都放在一个长度为m的环上,此时环上所有的数都可以作为中位数,任选一个点为x,过x和圆心做一个穿过整个圆的直线,在直线右边的点都通过+1来到达x 而左边的模数都通过-1来到达x。同理 这个农夫问题就是求如何放置x 使得所有的ai%m到x的总距离最小(因为每次的操作数都是1,故这里叫做距离)注意我们这里求的是:在所有已经选定的x中的,每个已定x都有一个最小操作数,求的是这些所有最小值中的最小值。x左边区间:a[x]-a[i]+....+a[x]-a[x-1]==(x-i)*a[x]-
2025-04-09 14:45:54
1043
原创 关于acwing 蛋糕游戏的做题记录
故只需要将n个蛋糕中所有连续的n/2+1个蛋糕的每次堆叠的大小中的最小值求出就行(至于为什么n/2+1列举几次例子就行)然后所有蛋糕总数-这个最小值便是elivin贪心吃掉的蛋糕。将o(n*n)转化成了o(n)i++) //构造前缀和数组 一次o(n)后面每次查询都是o(1) 如果不用前缀和 那么循环嵌套就是o(n**2)i++) //构造前缀和数组 一次o(n)后面每次查询都是o(1) 如果不用前缀和 那么循环嵌套就是o(n**2)于是我激动得¥#%……
2025-04-08 15:03:49
880
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅