- 博客(230)
- 收藏
- 关注
原创 蓝桥杯每日一题----海底高铁
其实解题思路蛮简单的,我们只要找到每个城市去的次数,再加上每段路程最小的花费,就是总的最小的花费。在这道题来说,主要使用的想法就是使用一维的差分数组,这道题中有两个买票的策略。比如说,从1,3,那么可以设为1为L,3为R。K为1,当中的路径每个+1.一种是,直接买票,另外一种是买IC卡并买带有优惠的票。而我们在获取每段路程的次数上,就可以使用差分的方式。好了,今天的内容就到这里,我们明天再见。P3406 海底高铁 - 洛谷。
2025-03-21 21:51:57
472
原创 蓝桥杯每日一题----一维差分
所谓的差分,就是我们创建一个差分数组,然后存放每个元素和前面一个元素的差值,所以,当我们从L,到R中每个元素都+K的时候,那么差分数字的L就会+K,然后R+1就会-K,其余保持不变。比如说,在我们这道题当中,我们可以看到的是,所以,当我们使用暴力模拟的时候,时间复杂度是肯定会超过要求的,所以,这个时候,最适合我们的就是进行一维差分。最后,在复原初始数组的时候,我们可以让原数组+差分数组+原数组的前面一个位置。好了,今天的内容就到这里,我们明天再见。然后,对差分数组进行操作。首先我们定义差分数组。
2025-03-21 20:59:49
316
原创 蓝桥杯好题推荐---激光炸弹
此外,这里还有一个特别需要注意的点,就是题目中所同一个位置可能存放多个价值,所以,我们在进行价值处理的时候,应使用的是。然后,我们先对这个价值数组进行处理,由于后面使用的时候,我们是从(1,1)开始的,所以,我们统一把坐标往右下移动一位。在这道题目当中,我们使用的是二维前缀和数组的思想,我们首先可以常见一个二维前缀和数组和一个存放价值的数组。在这个之前,我们需要将m设置为m何n的最小值,因为这个正方形的边长是可能大于这个整个数组的长度的。P2280 [HNOI2003] 激光炸弹 - 洛谷。
2025-03-16 13:48:18
455
原创 蓝桥杯好题推荐---二位前缀和
在这道题目当中,是要我们输出以x1,y1为左上角,x2,y2为右下角的子矩阵的和,其实这个首先很简单的思路,就是可以进行枚举,但是枚举的话,时间复杂度会超过题目的要求。第二个就是利用前缀和的方法,我们的前缀和数组f[i][j]中存放的是从(0,0)到(i,j)的所有的数的和。当我们数字求和的时候,可能会超出Int的类型范围,所以,我们应采用long long 类型。这个的面积,我们可以表示为(A+C)+(A+B)-A+x。好了,今天的内容就到这里,我们明天再见。那我们怎么表示要查找的这片区域的面积呢?
2025-03-16 13:25:15
406
原创 蓝桥杯好题推荐----最大字段和
在这道题目中,我们使用的其实也是前缀和的思想,开始的时候,我创建一个前缀和的数组,然后用前缀和中的最大值-前缀和中的最小值,就是距离的最大值。但是这样子是不可以的,所以,我们还是应该利用前缀和数组,不断地找到距离的最大值,找距离的最大值,我们则用当前的前缀和-前面所找到的前缀和中的最小值。这样就可以保证字段的合理。好了,今天的内容就到这里,我们明天再见。P1115 最大子段和 - 洛谷。因为我们并没有考虑字段的合理性。
2025-03-16 11:30:47
248
原创 蓝桥杯好题推荐---前缀和
这种题目是要求我们找到一个数组中从l到r的元素的和,查询Q次,这道题目中,我们最直观的做法,往往就是暴力枚举,但是这样子时间复杂度会超过允许的范围,所以我们使用前缀和的方法,所谓的前缀和,就是说,我们创建一个前缀和数组,在这个数组中,我们存放着从第一个元素,到这个元素的总和,这样的话,如果我们确定好了要查找的目标,那么直接使用r的数组的数字-l的数组的数字就好了。这样的话,我们就可以保证使用O(1)的时间复杂度来完成我们的任务。好了,今天的内容就到这里,我们明天再见。这个是我们的完整的代码。
2025-03-16 10:33:53
419
原创 蓝桥杯好题推荐---子集
在这道题目当中,我们其实是要找到这个数组当中所有的元素的组合,然后返回,所以,除了递归之外,我们还可以使用二进制表示的方法,我们用二进制的0来表示,没有使用,1来表示使用,也就是说,我们假设数组为1,2,3,78. 子集 - 力扣(LeetCode)好了,今天的内容就到这里,我们明天再见。所以,我们就可以这样写我们的代码。
2025-03-14 21:19:24
520
原创 蓝桥杯好题推荐---扫雷
对于扫雷这道题目来说,我们可以设置为两个数组,一个数组来存放信息,另外一个来进行检测,此外,其实检测数组的第一个数的内容确定的时候,则这个数组的所有内容就确定了,所以对这道题目来说,其实三个结果,要么1,要么0,要么2。P2327 [SCOI2005] 扫雷 - 洛谷。好了,今天的内容就到这里,我们明天再见。
2025-03-14 21:13:11
318
原创 蓝桥杯好题推荐----高精度乘法
这道题的思路,其实和前面差不多,我们主要说一下最为关键的部分,在高精度乘法的模块部分,我们主要采用的是无进位乘法,就是将进位的处理,我们放在最后,先处理其余的部分。P1303 A*B Problem - 洛谷。好了,今天的内容就到这里,我们明天再见。
2025-02-28 23:41:16
419
原创 蓝桥杯好题推荐-----高精度减法
这个题目的解题思路,其实是和高精度加法是非常像的。怎么说呢,其实开始的时候,由于范围受限的原因,所以我们必须把数字存到字符串中,然后用倒序,存到数组中,然后进行高精度减法,进行高精度减法的时候,我们可以逐个相减,然后如果减下的数字小于0,那么+10,前一位减一,最终从非0的第一位开始输出。记录详情 - 洛谷 | 计算机科学教育新生态。好了,今天的内容就到这里,我们明天再见。
2025-02-28 16:41:25
492
原创 蓝桥杯好题推荐--高精度加法
高精度加法,其实这种题目,因为数据范围的原因,所以我们不管用什么类型,都达不到这个的范围,所以,我们一般采用的就是数组+字符串,我们把要加的数字存放到字符串中,然后字符串中的数字倒序存入数组中,然后我们会定义三个数组,然后利用数组完成加法操作。好了,今天的内容就到这里,我们明天再见。
2025-02-28 11:12:58
435
原创 蓝桥杯好题推荐------蛇形方阵
还有一点需要注意的就是,当最后输出的时候,要有三位,不足三位的,前面用空格补齐,这种就适合使用printf("%3d",num);对于这道题目来说,这道题题目中很重要的就是模拟实现顺时针填入数字的过程,而一个很好的,可以实现这个过程的方法就是利用数组,这个应该怎么理解呢?比如说,我们创建两个数组,一个叫做dx,一个叫做dy,分别表示x轴的操作和y轴的操作。通过这个数组,我们就可以模拟填入数字的这个过程,我们接下来实现一下相关的代码。好了,今天的内容就到这里,我们明天再见。
2025-02-25 20:17:55
667
原创 蓝桥杯好题推荐--多项式输出
这种题目大多属于模拟题,这种是算法题目中较为简单的题目,这种情况,最重要的就是分类讨论,确保每种情况都被考虑到,保证不会重复,不会缺漏,不要直接就上来写,否则会遇到一堆错误。你看,根据前面的解题思路,我们就可以分成三个部分来完成我们的代码,在数字处理的时候,为了防止符号对数字的影响,所以我们可以对输入的值取绝对值,这样就可以避免正负号对x的影响。这个就是这道题目,基本的情况,对应我们的代码也分这三种情况来写。好了,今天的内容就到这里,我们明天再见。
2025-02-25 11:06:31
413
原创 蓝桥杯lesson3---string的使用
string字符串是一种更加高级的封装,string字符串中包含了大量的方法,这些方法使得字符串的操作变得更加简单,string的使用,往往贯穿于整个蓝桥杯生涯中。迭代器是一种对象,它可以用来遍历容器,迭代器的作用类似于指针,或者数组下标,这就意味着,如果我们想要访问迭代器所指向的值,我们需要解引用。当然C++中的string创建的字符串和char类型的数组所表示的字符串还有一个区别,string类型的字符串对象可以直接赋值。这个其实适用于不带空格的字符串,但如果输入的是带空格的字符串呢,我们来看看。
2025-01-23 21:45:34
1200
原创 数据分析系列----beautifulsoup4模块
使用CSS选择器(标签选择器,id选择器,class选择器,父子选择器,后代选择器,nth-of-type选择器等),从树结构中遍历符合CSS选择器的所有结果,存放在列表中。使用CSS选择器(标签选择器,id选择器,class选择器,父子选择器,后代选择器,nth-of-type选择器等)从树结构中遍历符合CSS选择器的第一个结果,存在列表中。在使用这个模块之前,先要确保我们拿到了网页的源代码,怎么拿到网页的源代码,我们在上一篇文章中有说到,不会的同学可以翻上去看一下。
2024-12-09 20:44:27
1053
原创 数据分析系列---requests的使用
虚拟环境在项目中可以实现环境的隔离,假设DemoA和DemoB分别用到了某个三方库1.0和2.0版本,那么在一个环境中,就会出现冲突,这个三方库只能安装其中一个版本。我们可以通过设置headers来进行伪装,headers是标头,其中的User-Agent是标头当中的一个参数,它的存在足以使爬虫应对大部分的网站。如果网页中发生了乱码,再写下面的这一段代码,其中,utf-8表示这个网页的编码方式。然后,我们向网址发送请求,得到其给的响应结果(响应结果中包含了我们需要的各种信息)比如说,我们想要访问的是百度。
2024-12-08 21:55:02
889
原创 蓝桥杯lesson2----数据类型
如果我们每个人自己给这些字符中的每个字符编一个二进制序列,这个叫做编码,后来,美国国家标准学会有出台了一个ASCII编码,C语言中的字符就遵循了ASCII编码的方式。C++中有一种类型叫做:bool,布尔类型的变量的值可以是true或者false,这种类型的变量专门表示真或者假的,当然在C和C++中,0表示假,非0表示真,有时候不使用bool类型也能表达相同的逻辑。对于char类型来说,到底是有符号的还是无符号的是完全有编译器决定的,大部分编译器上面就是有符号的。好了,今天的内容就到这里,我们明天再见。
2024-12-07 18:55:28
1367
原创 蓝桥杯软件赛系列---lesson1
我们今天会再开一个系列,那就是蓝桥杯系列,我们会从最基础的开始讲起,大家想要备战明年蓝桥杯的,让我们一起加油。
2024-12-06 21:40:24
1166
原创 python语法基础---正则表达式(补充)
上一篇文章中,我们讲到了贪婪匹配和非贪婪匹配,我们在这篇文章中,主要讲的就是贪婪匹配和非贪婪匹配的剩下的部分,话不多说,让我们开始吧。默认情况下,如果正则表达式中出现(),结合findall查找,最终的结果中只显示()的结果。第三个正则表达式的意思是说,从a开始,中间进行贪婪匹配,然后到b结束。你看,虽然这三个打印出来的结果是相同的,但是,其中表达的意思并不相同。第一个正则表达式的意思是说,从a开始,中间进行贪婪匹配,直到结束。通过这个代码,我们可以了解到的是,这个|,其实就是或的意思。
2024-12-05 21:56:35
1132
原创 Python语法基础---正则表达式
我们这个文章所讲述的,也是数据分析的基础文章,正则表达式首先,我们在开始之前,引出一个问题。也是我们接下来想要解决的问题。那就是,我们应该怎么判断合适的QQ号。我们先给大家实现一下这个解决这个问题的代码,稍后再给大家讲解一下其中的原理。这个是用我们之前所熟悉的代码来实现这个功能,这个应该不用太仔细解析,大家可以先好好看看。我们接下来重点看用正则实现这个功能的部分。下面的部分就是用正则表达式实现的。其中包含了很多的知识点,这个需要我们慢慢来进行分析。首先,我们先来看一下结果。
2024-12-04 21:46:06
1423
原创 Python语法基础(八)
当我们输出的num超出list1的检索范围的时候,这个代码是会报错的,如下图所示。将可能存在异常的代码检测起来,如果代码遇到异常,则跳过异常,继续执行后面的代码。当程序执行的过程中,我们遇到了异常,而且异常未被处理,那么程序就会终止异常。好了,我们今天的文章就到这里,我们下次再见。这一个部分,我们来讲一下异常处理这部分。比如说,我们来看下面的这一段代码。
2024-12-03 22:32:59
333
原创 Python语法基础(六)
同一个装饰器,同时装饰多个函数。注意:如果同一个装饰器装饰多个不同的函数,为了适配所有的函数,给装饰器的内部函数设置不定长参数。比如说,看下面的这部分代码。
2024-12-02 19:36:47
790
原创 Python语法基础(四)
首先将sex中的第0个元素和第一个元素传递给func,进行运算,返回结果1,接着,将结果1和第二个元素传递给func,进行运算,返回结果2,直到所有的元素都参与了运算,表示运算结束。此时,若我们不放在list当中,而是存放到一个变量当中,然后打印这个变量,我们来看看打印出来的是什么?你看,这个代码,我们也完美实现了我们想要的功能,那么,这两个有什么区别呢?在这段代码中,我们将生成的元素放入了列表当中,然后我们打印这个列表。那么,利用sorted,我们也可以这样,我们来看下面的这一段代码。
2024-11-29 19:32:11
1488
原创 Python语法基础(二)
大家可以分析一下这里打印出来的结果为什么会是10,如果分析错误的话,需要重新返回去看看我们上面讲到的知识点。上面的这两个都是函数生成器的定义,那么定义了函数生成器之后,我们应该怎么访问生成器中的元素呢?在这段代码中,func1的执行是会报错的,是因为其中的n1还有被复制就进行了调用。如果我们这时候将所有的变量的名称都改为相同的,这个时候会发生什么呢?在嵌套定义的函数中,定义在外部函数中的变量,只能在外部函数中使用。你看,在这两个代码当中,第二个因为作用域的原因,所以调用会报错。我们来看下面的这一段代码。
2024-11-27 16:25:30
876
原创 Python语法基础(一)
在这个函数的定义当中,我们在形参中,对age和address进行了赋值,这样做的好处是,即使我们传入的参数小于三个,这个函数仍然可以成立。我们前面说函数和变量是很类似的,与给函数赋值和给变量赋值,结果也是极其相似的,我们来看一下给变量的赋值。这个代码是会报错的,因为func1中的变量在func2中是无法直接使用的,因为两个的作用域并不相同。闭包的前提是函数的嵌套定义,在内部函数当中使用了外部函数的变量。首先,在上面的这个嵌套定义的代码中,执行结果是这样的。是运行不起来的,因为这个时候它的类型发生了改变。
2024-11-26 22:12:48
1075
原创 Linux系列-僵尸状态
在这个时候,如果没有人处理这个子进程,那么这个子进程就会一直处于僵尸状态,这个子进程的task_struct就会一直存在,从而一直消耗内存,这就造成了。所以,其实对于语言层面的内存泄漏问题,若是对于那种会自动退出的程序而言,问题是不算太大的,若是发生在常驻内存的进程当中,这个时候问题会比较大。就像下面的这个示例一样。很明显的,是不是得先有对应的内核数据结构,当管理信息建立好的时候,才能放进去对应的代码和数据,所以,这个时候我们想一下进程的创建的过程,是先有代码和数据,还是先有对应的内核数据结构。
2024-11-20 22:12:15
1020
1
原创 Linux系列-进程的属性
我们可以看到,这两个死循环同时再跑->两个执行流同时在跑,if 和else if同时成立,从fork之后就会有两个进程,分布进行,fork有两个返回值,给父进程返回子进程的pid,给子进程返回0.这两个分支之间也是父子关系,一个是父进程(自己),一个子进程(fork创建的),一个父进程是可以创建出多个子进程的,所以进程其实也是树形结构。在命令行当中,执行命令,执行程序,本质就是bash的进程,创建的子进程,执行我们的代码,如果是我们刚才创建的进程,这个时候,他的PID是17293,当我们重新启动这个进程。
2024-11-06 19:31:42
1014
原创 Linux系列-进程的概念
这篇文章,我们主要分析一下进程。之前,我们讲过了冯诺依曼体系架构, 我们常见的计算机,像笔记本,或者不常见的计算机,像服务器,大部分都遵守冯诺依曼体系。截止目前,我们所认识的计算机,都是又一个一个的硬件组件组成的。主要包括三个部分:输入单元、中央处理器、输出单元。
2024-11-02 20:16:19
1116
原创 Linux系列-gcc/g++的使用
程序从书写完成到执行代码一般分为四步,分别是预处理,编译,汇编,连接,这篇文章,我们依据上一篇文章中的代码,来解释一下这四步的操作。
2024-10-31 16:58:19
665
原创 Linux系列-vim的使用
vim是多模式编辑器,不同的是vim是vi的升级版本,它不仅兼容vi的所有指令,而且还有一些新的特性在里面,比如语法加亮,但是刚进入vim的时候,是处于正常模式下面,只有切换到插入模式下面才能够输入文字。目前处于插入模式下面,我们就可以一直输入文字,上面是我们输入的一段简单的C语言代码。控制光标的移动,字符,字符或行的删除,移动,复制某区段及进入插入模式下面。文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。好了,本次的文章就到这里了,我们下次再见。我们常用的vim有着三种模式,分别是。
2024-10-31 16:28:37
470
原创 Linux系列-yum软件安装包
在Linux下安装软件,常用的方法有下面几种下载到程序的源代码,进行编译,得到可执行程序yum/apt,直接下载软件包,所谓的软件包其实就是有些人把一些常用的软件提前编译好,做成的软件包,然后把软件包放到了一个服务器上,然后我们可以通过包管理器可以获取到这个编译包, 直接进行安装。其实怎么说呢,就是软件包和包管理器,就类似于APP和应用商店。所以,为什么Linux很强大的,主要是Linux对应的论坛,生态,特别强大。
2024-10-26 11:26:12
483
原创 Linux系列-权限
将现有的存取权限减去权限掩码后,即可产生建立文件时预设权限,超级用户掩码为0022,普通用户为0002。但我们一般用户,不能直接使用核心,只能通过核心的外壳程序,也就是所谓的shell来进行沟通。比如说,我们将超级用户切换为普通用户,我这里创建一个普通用户为yuchen。从技术角度,shell的最简单的定义:命令行解释器,主要包含。你看,这样子的话,我们就实现了从超级用户到普通用户的切换。说明了,主用户可以读可以写,o用户只能读,g用户也只能读。:chmod参数,权限,文件名。r是读,w是写,x是执行。
2024-10-23 21:33:32
597
原创 Linux系列-Linux的常见指令(三)
而在Linux当中,其实存在着时间戳的概念,时间戳就是从1970年1月1日午夜12:00开始,以每秒开始计算的一个时间。在Linux当中,时间是很重要的,以为系统重存在着各种各样的日志,每个日志都有着对应的时间。看,它是存在于一个又一个的目录下的一个又一个的可执行的程序。所以,我们就可以使用alais对一个又一个的命令进行重命名。你看,这样子操作的话,我们就将这个文件的文件名进行了修改。你看,这样子的话,我们就得到了Linux中的时间戳。好了,本次的文章就到这里了,我们下次再见。
2024-10-23 21:01:31
492
原创 Linux系列-常见的指令(二)
Linux下一切都是文件,键盘,显示器,都可以用文件来进行看待,比如printf/cout是向显示器进行打印,也就是向显示器文件中进行写入。接下来,我们用mv实现一下对hello.txt路径的切换,如果我们要将hello.txt放到它的上级目录当中。你看,这样子的话,对原有的文件中的命令进行了新的覆盖,如果不想覆盖,那要怎么操作呢?另外需要注意的是,当这样写的时候,每次写新的命令,会把原有的字符进行重新的覆盖。你看,这样子的话,就不会对原有的命令进行新的覆盖。好了,本次的文章就到这里了,我们下次再见。
2024-10-11 21:37:23
425
原创 Linux系列-Linux的常见指令
一种是d,一种是-。其中的d表示的是目录,-表示的是普通文件,文本文件就是普通文件的一种。:对于目录,该命令列出该目录下的所有子目录与文件,对于文件,将列出文件名以及其他信息。而对于文件的任何操作,无非要么是对文件内容进行操作,要么是对文件属性进行操作。在这里,需要注意的是,选项是可以拼接的,并且选项的顺序是可以随意的。第一个表示的是特殊目录中的当前目录。第二个表示的是特殊目录中的上级目录。而在显示出来的目录内容当中,第一个第二个是经常出现的。这个多叉树的叶子节点,一定是普通文件或者是空目录。
2024-10-11 18:21:37
706
原创 C++系列-二叉搜索树
二叉树在我们之前讲数据结构的时候完成过二叉树的实现,在二叉树中,每个节点都会指向它的左右节点,所以,我们可以先初步实现二叉搜索树当中的每个节点。因为二叉搜索树实现插入功能需要用的查找功能,所以,我们先来实现查找这个函数。二叉搜索树又称二叉排序树,它或者是一颗空树,或者是具有以下性质的树。在这个当中,我们要记得定义一个父亲节点,便于找到后进行插入操作。接下来,我们先来写一下二叉搜索树需要实现的基本功能。接下来,让我们逐步分析一下每个功能的具体实现方式。好了,本次的文章就到这里了,我们下次再见。
2024-10-04 19:26:25
449
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人