自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(67)
  • 收藏
  • 关注

原创 【LinuxC】gcc编译流程

A:按照惯例,-lxxx 会被解释为 查找库文件:libhello.so 或者 libhello.a。方式2:我们可以将自己写的那部分源文件对应的.o文件编译成动态库,目的就是为了方便代码。Q:为什么不能将main.o编译成动态库或者静态库呢,为什么一直在讨论hello.o?Q:-lhello给的是hello,怎么会找到libhello.so呢?把多个 .o 文件合并,生成可执行文件 main。所以它可以编译成 静态库 .a 或 动态库 .so。将hello.o编译成静态库libhello.a。

2025-09-17 11:59:50 927

原创 【前缀和+哈希表】P3131 [USACO16JAN] Subsequences Summing to Sevens S

这个值,而不是在遍历的过程中需要查找的时候,还要再来一个for循环把前面的前缀和再遍历一遍看看有没有对应的值。优化掉前缀和数组,使用一个int变量sum来代替,因为只用记录一次数值即可,后面不会查。由于模完7之后的数字只有0~6,所以本题的哈希表可以用一个大小为7的数组优化。就是可以记录下某一个值对应的下标,这样就可以。

2025-09-14 16:36:59 182

原创 【Windows】VMware安装Ubuntu操作系统

如果在上一阶段的第3步“选择安装来源”已经选择了“安装程序光盘镜像文件”,那么当你设置好虚拟机的时候,它就会自动开始安装。如果选择的是“稍后安装操作系统”,那么就要到设置里面的CD/DVD中选择下载好的iso文件,再进行安装。子网掩码(如 /24)告诉你:前多少位是“网络位”,后面剩下的是“主机位”。你给虚拟机分配多少,它就直接从你的主机物理内存里占用多少,是1:1的。:指的是系统安装光盘的 镜像文件,存放在硬盘里,VMware 会把它虚拟成光盘来启动,就像真的有一张光盘插在虚拟光驱里。

2025-09-11 16:03:01 2145

原创 【dfs暴搜】P1223 排队接水

在用path记录第pos个饲料选的时候用的是“或等”,在回溯path的时候,要将表示第pos个饲料的1置为0,这时候应该使用“与等”。这是把除 pos 位以外的所有位都置 1,完全破坏了 path。要判断path的第i位是否为1,一般使用。我错误地写成了“或等”,

2025-09-08 14:32:44 304

原创 【01背包问题变体】P1282 多米诺骨牌

识别双目标:最小化差值 + 最小化旋转次数确定主次:差值为主,旋转次数为次状态设计:用差值作为状态维度,旋转次数作为状态值转移分析:考虑每个骨牌的两种选择答案提取:从最小差值开始搜索将次要目标作为状态值,将主要目标作为状态维度,这样可以在DP过程中同时优化两个目标。

2025-09-06 22:06:41 811

原创 【建图+dsf/最长上升子序列dp】【记录最优解路径】P2196 [NOIP 1996 提高组] 挖地雷

解法二:最长上升子序列dp。

2025-09-05 22:42:55 273

原创 【特殊枚举】P1158 [NOIP 2010 普及组] 导弹拦截

就是只枚举第一个拦截系统的半径,然后在没有被第一个拦截系统的半径包裹的点的集合中确定第二个拦截系统的半径,因为要满足所有导弹都被拦截,所以第二个拦截系统的半径要在这些未被拦截的导弹中取距离它的最大值。首先对所有导弹到第一个拦截系统的距离按照从大到小排序,然后从大到小依次枚举这些导弹,每次枚举都会多出来一个点,根据这个点确定第二个拦截系统的最大半径。

2025-08-28 17:11:26 325

原创 【正负抵消+前缀和+哈希表】P1114 “非常男女”计划

最刚开始想到的方式就是两层循环枚举所有区间,显然会超时,那么有什么更好的方式呢?对于题目中的二元对立的元素,可以分别将它们赋值为1和-1,这样相加就能相互抵消。本题的核心思想是利用前缀和的思想,来确定哪一段的和是0。如何求出男女人数相等的一段连续子区间的最大长度呢?如何快速查找前面某一段的和为1,就要用到哈希表。

2025-08-27 13:40:37 152

原创 【最短路问题转换/拓扑排序+dp】P1807 最长路

我们可以将边权存成对应的相反数,那么本身越大的路径就变得越小了,按照最短路算法选择目前最短的路径,再取相反数就是我们原本要求的最长路径。我们要求的是从1到n的最长路,而实际在求最长路的时候,其他入度为0的结点会影响从1到n的结果。所以我们先对除1以外的所有入度为0的结点做一次拓扑排序,将这些可能干扰结果的路线全部砍掉以后,再对1号结点做拓扑排序。由于本题要求的是1号结点到第n号结点之间的最长路径,而结点总个数就是1~n个,所以1号结点的入度为0,n号结点的出度为0,正好可以用。时间复杂度为O(n+m)。

2025-08-26 15:20:52 308

原创 【区间DP】P1063 [NOIP 2006 提高组] 能量项链

注意:对于倍增后的序列:2 3 5 10 2 3 5 10 我们研究的长度为n+1,若从2开始就到2结束,即:2 3 5 10 2,长度为n+1,这就叫成环。若从3开始就到3结束,即:3 5 10 2 3。由此分析可见,本题可以抽象成三个数的石子合并问题,就得到了区间DP的解题思路。用区间的左右端点来描述状态,通过小区间的解来推导出大区间的解。

2025-08-25 17:18:04 161

原创 【二分答案】P1843 奶牛晒衣服

当你想出一种很诡异的解题方法时,不妨换一种思路

2025-08-21 16:45:14 292

原创 【多重背包】P2347 [NOIP 1996 提高组] 砝码称重

这题主要就是要感知到这是一道背包问题,砝码可以看作物品,每个砝码的重量就是物品的重量,每个砝码的数量就是物品的数量,需要计算。题目规定了6种重量的砝码,并且说明了总重量不超过1000,那么我们就确定了边界条件。填表顺序:根据状态转移方程确定要从上往下,从左往右遍历;空间优化就从右往左遍历。对于第i个物品,可以不选,可以选1次,可以选k次,所以这是一道。不挑任何砝码时可以凑出总重量为0的。那么我们就有一个思路来规定。,那么f就可以用一个。

2025-08-21 00:28:54 244

原创 【01背包】P1466 [USACO2.2] 集合 Subset Sums

要求两个子集合的数字和是相等的,就相当于给定了限制条件在1~n中挑数字。先分析状态表示,状态表示一般跟着题目要求什么来设置。本题要求划分方案数,那么我们的状态表示就设置成方案数。代码实现上,如果写的是二维的状态转移方程,由于“选”是有条件限制的,所以“选”和“不选”是分开讨论的。但是注意,题目要求的实际上是划分成两个子集合这样的方案有多少个,而我们的状态表示。如果写成一维的,由于将条件省略进了循环中,就可以写在一起。求的是有多少个数值和为sum/2的子集合,所以最后。感觉本题最难的难点就是想出用。

2025-07-17 15:42:46 225

原创 【贪心】P1106 删数问题

在第一次遍历后我们找到了当前最小的数4,然后从4后面再去找最小的数,找到了7,这时候我们还可以保留6个数字,但是pos已经到达末尾了,程序结束,所以只输出了47。每次遇到一个数字,如果它比前面的数字小,就尽量删掉前面比它大的数字,这样能让整体数字更小。想象你有一串数字,比如 175438,要删掉 4 个数字,让剩下的数字最小。如果当前数字比栈顶数字小,就弹出栈顶数字,直到已经删够了 k 个数字。从左到右扫描数字,维护一个栈,保证栈里的数字是从小到大排列的。如果当前数字比栈顶数字大就入栈。

2025-07-17 13:22:25 377

原创 【拓扑排序+dfs】P2661 [NOIP 2015 提高组] 信息传递

环中的某一个结点(拓朴排序后未被标记的结点),然后计算出环的长度,并且要找到最短的那个环长,这样就知道游戏能进行多少轮了。我们可以发现,2、3、4之间存在一个环,这个环的长度是3,那么意味着在3轮信息传递之后游戏就会结束。这么分析之后问题就变得简单了,我们只需要通过。找到整个关系图中的环,然后。

2025-07-13 16:17:32 187

原创 【枚举+差分】P6070 『MdOI R1』Decrease

想了半天也感觉无从下手。这是因为本题的关键点没有理解,本题考察了原数组跟差分数组的联系,原数组全部为0的时候,其对应的差分数组的值也全部为0。那么这样就可以从枚举 k x k 矩阵的所有点挨个修改值优化成只枚举 k x k 的左上端点,然后使用insert修改矩阵的值。刚拿到这道题的时候很明显就看出来要做差分,而且将矩阵中所有的数变成0大概率是要暴力枚举,再结合数据范围 n 只有 5e3,可以确定是暴力枚举+差分了。

2025-07-13 15:36:01 332

原创 【贪心】P2660 zzc 种田

调试一下,假设 x=1,y=4,代码2一进程序就会比较 x、y 的大小,像现在这样 x 比 y 小就会交换 x、y。但是对于优化后的代码,会直接进入循环,先计算出 cnt = 1/4 = 0,然后计算出 ret += 0 * 4 * 4,相当于ret不变,然后 1 %= 4 结果还是 1,最后一步交换 x、y。这个循环非常耗时,x、y的数据范围是1e16,只能过三个点,其他的全部TLE。注意:函数中的ret是默认参数,默认参数允许函数在调用时省略某些参数,编译器会自动使用预先定义的默认值。

2025-07-04 19:30:30 325

原创 【二分+差分】P1083 [NOIP 2012 提高组] 借教室

那么我们进一步分析,会发现这m个订单是存在二段性的,即当执行到某一个订单之后,可能会出现某一天或几天的剩余房间数变成负数,那么包括这一个订单及其之后的所有订单都会导致某一天或几天的剩余房间数变成负数。以这一个订单为分界线,之前的所有订单都是合法操作,这个订单及其之后的所有订单都是非法操作。check函数就是差分操作。的,它需要在房间数变成负数的时候就停止订单处理,并且返回这个订单编号。这道题m个操作,每次操作对s~t天数的剩余教室数量统一减去d个,这不就是对一个区间批量操作吗,很容易就想到用差分来解决。

2025-07-03 16:42:33 678

原创 【枚举/找规律】P1548 [NOIP 1997 普及组] 棋盘问题

我刚开始在写这题的时候虽然看到数据范围很小,但是我没想到什么暴力的方法,直接就着手找规律了,然后很快就找到公式了。这道题有两种方法,一种是找到正方形、长方形个数与 n、m 之间的关系;(n、m在100以内,四层for循环不会超时)。

2025-07-03 13:12:40 302

原创 【基础算法】前缀和、差分

前缀和与差分的核心思想都是都是用空间换时间的做法。

2025-07-03 00:34:36 1541

原创 【dfs/并查集 + 01背包】P1455 搭配购买

思路很简单,就是将捆绑在一起的物品合并成一个物品,然后做01背包。难点在于怎么将捆绑在一起的物品合并成一个物品?可以 bfs / dfs / 并查集。这里演示两种写法:dfs 和 并查集。然而这道题不空间优化是不行的。

2025-07-02 15:02:28 244

原创 【分治思想】归并排序 与 逆序对

逆序对(Inversion)是指在一个序列中,如果前面的数比后面的数大,那么这两个数就构成一个逆序对。

2025-07-01 23:53:46 1255

原创 【模拟、堆】P1190 [NOIP 2010 普及组] 接水问题

我们看AC的这一段代码,实际上是有冗余的。w数组没必要开辟,可以每次读入一个同学的接水时间就放入堆中,也没有必要单独求maxw,然后判断水管数量和人数的大小来进行不同的逻辑,这些是可以统一完成的。于是要想用pair,就要改为 {结束时间, 接水时间},确保堆是按结束时间排序的。但是这样是多此一举,就不再讨论了。于是我删掉了PII,存int,然后就AC了。这样的一个微操,就免去了要统计堆中剩余元素的操作(后面想了想感觉开始时间没必要存,堆元素只存一个。最刚开始想的是用小根堆来模拟,堆里面存一个。

2025-07-01 15:22:38 328

原创 【扩欧应用】同余方程

摘要: 本文探讨了同余方程与扩展欧几里得算法(EEA)的联系,通过将同余方程转化为线性不定方程形式进行求解。重点分析了通解公式中变量的周期性,并通过例题(如牛客网模板题和洛谷青蛙约会问题)展示了如何求最小正整数解。代码实现中,通过模运算确保解的合法性和最小性。核心思想是利用EEA处理同余方程,并通过调整解的范围满足实际需求,适用于解决ACM竞赛中的数论问题。

2025-06-28 20:29:57 980

原创 扩展欧几里得算法

在裴蜀定理中,我们有一个疑问,如何求axbygcdab的整数通解呢?扩展欧几里得算法就可以解决这个问题为什么我写不出来这种递归?

2025-06-23 17:01:39 1011

原创 裴蜀定理(Bézout‘s Identity)

为什么解不唯一?

2025-06-22 14:29:05 871

原创 欧拉定理(Euler‘s Theorem)、扩展欧拉定理、欧拉降幂

欧拉定理要求a和n互质,而扩展欧拉定理放宽了这个限制,适用于所有情况。

2025-06-21 20:20:09 698

原创 【求乘法逆元】费马小定理(Fermat‘s Little Theorem)+ 快速幂

在同余式中,若涉及除法,则不满足分配律。那么如何处理同余式中的除法呢?[^1] : 剩余系和最小剩余系概念[^2] : 第3步证明过程[^3] :a−1a^{-1}a−1的含义。

2025-06-20 14:52:53 223

原创 欧拉函数(Φ(n):1~n中,与n互质的数的个数)

通项公式可以根据数字n质因数分解后结合质数幂的公式(公式2)推导得到,很简单。根据通项公式,我们在求一个数字的欧拉函数时,仅需使用试除法对它质因数分解,然后通过通项公式求值。

2025-06-18 17:24:49 758

原创 约数相关问题

对于一个整数n,若d是n的约数,那么dn​也是n的约数。因此,可以枚举1n​的所有数字通过试除法求出n的所有约数。

2025-06-17 20:35:20 987

原创 基本算数定理(唯一分解定理)

基本算数定理,也称为唯一分解定理。定理陈述:任何大于 1 的正整数,要么本身是质数,要么可以唯一地表示为若干个质数的乘积。

2025-06-17 17:40:55 512

原创 【秦九绍算法】小红的 gcd

而且欧几里得算法会不断对a取模,我们又知道可以在任意位置取模的性质。根据这两个特性,我们就可以通过秦九绍算法将 a 这个数字拆分10的一元多项式,在逐位计算a的同时计算a mod b。但是这题的a非常大,最大是一个1e6位数,无法使用任何数据类型存储。如果使用高精度计算的话,需要逐位计算,会超时。它的核心思想是通过嵌套乘法和加法来减少计算次数,将多项式求值的。

2025-06-17 14:12:16 1063

原创 【素数定理】分析素数分布密度

素数定理的严格证明需要复分析(如黎曼ζ函数),但可以通过。π(n):不超过 n 的质数的个数(素数计数函数)。n 不被任何小于 n​ 的质数整除的概率约为。对于一个大数 n,它是质数的概率大约是。: 表示“在 1∼n 中,大约每。​:对 π(n) 的渐近估计。质数在自然数中的分布。

2025-06-17 14:02:08 812

原创 高精度模板

A:方便记忆模板,四种高精度都是倒着存,而且方便处理前导0,处理的方式与其他的高精度都一样。但是正着存就要从数组的左边开始处理前导0,而且输出结果的时候还需要确定范围。,虽然我们知道减法顶多会让较大的那个数字减少一位,所以可能就想这条语句顶多执行一次,但是如果这被减数和减数相等,那么减完的结果全部是0,这个时候必须要用。Q:为什么a要从高位开始处理还要倒着存?注意:在消除前导0的时候。

2025-06-14 21:07:19 303

原创 【质数】埃氏筛法、线性筛法(欧拉筛法)

核心思想:对于任意一个大于1的整数,它的 k (k > 1) 倍是一个合数。根据这个思想,我们可以从2开始遍历到n,遍历到每一个数字 i 时,都枚举它的 k 倍的数字,打上合数的标记。这里可以做一个小优化,就是在枚举数字 i 的 k 倍数字时,可以从 i * i 开始枚举,因为小于 i * i 的数字都已经被枚举过了。举个例子🌰:当 i 从 2 枚举到 8 的时候,现在我们要开始筛掉所有 2~n 范围内 8 的倍数,将它们标记为合数。

2025-06-11 17:58:56 463

原创 【题解】P1156 垃圾陷阱

——前言:我看了很多将这道题的题解,都没有讲清楚,我在这里会讲的很仔细,可放心观看。

2025-06-10 19:41:51 835

原创 【单源最短路经】Dijkstra 算法(朴素版和堆优化版)、Bellman-Ford 算法、spfa 算法 及 负环判断

单源最短路径算法总结:Dijkstra(正权图)、Bellman-Ford/SPFA(负权图,可判负环)。朴素Dijkstra O(n²),堆优化O(mlogn);SPFA平均O(km),最坏O(nm)。负环检测用SPFA计数或Bellman-Ford额外松弛。

2025-06-07 19:11:44 1014

原创 【最小生成树】P2573 [SCOI2012] 滑雪

题目要求出 “最多能到达多少个景点” 以及 “此时滑行的最短距离”。i 的高度比 j 高。

2025-06-03 15:29:44 356

原创 【最小生成树】Prim 算法、Kruskal 算法

本文介绍了最小生成树(MST)的基本概念和两种经典算法。生成树是无向连通图的极小连通子图,具有n个顶点和n-1条边;最小生成树是所有生成树中边权之和最小的那个。Prim算法采用"加点"策略,通过贪心每次选择连接生成树与非生成树的最小权边,时间复杂度O(n²)。Kruskal算法采用"加边"策略,先对边排序再选择不构成环的最小边,时间复杂度O(mlogm)。两种算法各有特点:Prim适合稠密图,Kruskal适合稀疏图。文章以洛谷模板题为例,分别给出了邻接矩阵和邻接表实

2025-05-29 14:38:08 1130

原创 01背包、完全背包、多重背包、分组背包问题讲解

背包问题的核心是:在限定容量的背包中,选择一组物品使得总价值最大。不同变种的区别在于物品的选择限制:0-1 背包:每种物品。完全背包:每种物品可以选。多重背包:每种物品有。分组背包:将所有物品分成若干组,每组物品中最多只能。

2025-05-21 16:29:59 1446

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除