自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 CCF CSP 202012-3 带配额的文件系统 详解100分

本题细节较多,但本题解思路清晰,代码简洁,实际代码量不超过150行。思路:从根节点向下构建多叉树,建立结构体如下,随后根据题目操作对多叉树进行操作。

2024-03-08 10:35:43 317

原创 CCF CSP 202006-4 1246 (100分详细题解,矩阵乘法+快速幂)

同时考虑到题目给的s是一个部分数字串,故可能无法直接倒推回s=2,故s在整个序列的情况,可能分为s前面是1,s前面是6,或者s前面不是1或6, 因为4->16 6->64,都会产生两位,所以s的首个数字可能是16中的6,以及64中的6,由于s只是其中的一部分,所以我们要在前面补上1和6。s

2024-03-06 21:35:21 491

原创 c++ %运算符

运算符%俗称“取余”或“取模”运算符,负责计算两个整数相除所得的余数。在除法运算中,如果两个运算对象的符号相同则商为正(如果不为0的话),否则商为负。C++语言的早期版本允许结果为负值的商向上或向下取整,。根据取余运算的定义,如果m和n是整数且n非0,则表达式的求值结果与m相等。隐含的意思是,如果m%n不等于0,则它的符号和m相同。C++语言的早期版本允许m%n的符号匹配n的符号,而且商向负无穷一侧取整,这一方式在新标准中已经被禁止使用了。

2024-02-17 15:04:20 771

原创 C/C++输出输出相关问题

3)除了scanf(“%c”),scanf有一个特性——忽略先导的空白符,只要他们连续的出现在缓冲区的开头,不管有多少个连续的空白符,scanf都会把其读走并丢弃,直到遇到非空白符,再读入有意义的字符;4)读取字符串(字符数组)的时候,比如读aaa\n,你读入字符串最后会带有\n,这个\n并不是你输入的\n,而是编译器自己添加的,你自己输入的\n还留在缓冲区中。是C/C++中的一个标准库函数,用于从标准输入(通常是键盘)读取一个字符,并返回读取的字符,如果读取失败或到达了文件尾,就返回。

2024-02-17 11:35:24 691

原创 CMU15-445 Project0

这个project除了Task1刚上手有些陌生且思路不是太清晰写起来费些时间,之后几个就很快。借此,复习太久没动过的C++,重新认识了智能指针等C++技术和特性。

2024-01-27 16:01:10 532

原创 C++ transform算法中toupper的使用

用到这样一个函数,将小写字符串转为大写。

2024-01-27 15:29:52 1303

原创 命名强制类型转换

在上面的所有形式中,e的类型必须符合以下三个条件中的任意一个:e的类型是目标e的公有派生类、e的类型是目标tpe的公有基类或者e的类型就是目标bpe的类型。也就是说,强制转换的结果将与原始的地址值相等,因此我们必须确保转换后所得的类型就是指针所指的类型。通常为运算对象的位模式提供较低层次上的重新解释,用于进行底层的、不安全的类型转换,通常用于指针或引用之间的转换,以及整数和指针之间的转换。主要用于编译时的类型转换,它通常用于类层次结构中的相关类型、基本数据类型之间的转换以及一些隐式类型转换的显式表示。

2024-01-25 23:01:07 764

原创 CSP 202109-2 非零段划分

类比岛屿问题,假设一开始p非常大,水面淹没了所有岛屿,随着p的减小,即水面的下降,岛屿数量出现变化。该思路与思路一水面上升法类似,不同的是不再两侧判断是凹峰和凸峰,而是判断是在水面之下还是在水面之上,为此需要依据高度对山峰进行“排序”,不过需要两侧山峰的状态,就需要记录原始的次序,为此使用索引法解决。综上,不管是那种思路,大的方向是转化为水淹岛屿问题,以水平面分割为核心进行处理,思路一和思路三是很类似的,都是整个水平面移动进行计算,而思路二则是逐个对单个山峰进行水平面范围的约束。思路三(索引法+水面升降)

2024-01-25 13:45:22 803

原创 前缀和与差分

差分数组diff是一个长度为n的数组,其中diff[i]表示原始数组arr中的相邻元素之差。形式化地,。

2024-01-16 10:22:59 419

原创 priority_queue比较规则

在C++中,的默认行为是生成大根堆。如果想要生成小根堆,可以使用构造函数的第三个参数,传入一个自定义的比较函数。对于类型为然后在定义//我们定义了一个小根堆,堆的元素是pair类型的,使用自定义的比较函数cmp对元素进行排序。// 当然也可以使用lambda。

2024-01-11 15:11:50 482

原创 csp 201609-4

G国国王来中国参观后,被中国的高速铁路深深的震撼,决定为自己的国家也建设一个高速铁路系统。建设高速铁路投入非常大,为了节约建设成本,G国国王决定不新建铁路,而是将已有的铁路改造成高速铁路。现在,请你为G国国王提供一个方案,将现有的一部分铁路改造成高速铁路,使得任何两个城市间都可以通过高速铁路到达,而且从所有城市乘坐高速铁路到首都的最短路程和原来一样长。请你告诉G国国王在这些条件下最少要改造多长的铁路。

2024-01-11 14:46:41 365

原创 MySQL C API的使用

MySQL C API(也称为 MySQL Connector/C)是用于与 MySQL 数据库交互的 C 语言 API。它提供了一组函数和结构体,允许你在 C 程序中连接到 MySQL 数据库服务器,并执行查询、插入、更新等数据库操作。

2024-01-08 14:27:38 726 2

原创 ctemplate的使用

CTemplate是一种简单但功能强大的模板引擎,它是Google制作的一个开源C++库,广泛用于各种HTML模板解析和生成。CTemplate的主要优点是简单和灵活。它将模板和逻辑分开,使得页面布局和细节(HTML)与控制流、条件等逻辑分离,使软件的维护和修改变得更容易。:模板文件是普通的文件,比如一个HTML文件。在你想插入变量的地方使用的形式。例如,在一个HTML模板中,你可以写</</:首先,你需要创建一个的实例,并为其添加变量。:最后,你可以将填充了数据的对象和模板文件放入。

2024-01-08 13:57:52 513

原创 端口开放问题

以上两个问题,均是由宿主主机访问虚拟机上的某个端口所导致的错误,因为虚拟机的防火墙可能阻止了来自宿主直接的端口访问。这会在防火墙规则中添加一个允许来自外部的TCP流量的规则,并将该规则应用到端口8080。在虚拟机上开放所访问的端口,以下在Ubuntu操作。确保 ufw 已经启用,如果尚未启用,你可以通过。这会使防火墙加载新的规则。

2024-01-07 19:03:02 477

原创 算法学习总结

个人学习算法总结

2023-08-16 23:00:45 283

原创 路由表和转发表

当一台设备收到一个数据包时,它会使用目标IP地址在路由表中查找最佳路径,以确定数据包要到达哪个下一跳路由器,通过哪个出接口发送。转发表主要用于在本地网络中选择正确的接口,以便数据包能够到达目标设备。当一台设备收到一个数据包时,它会使用目标MAC地址在转发表中查找相应的出接口,以确定数据包要发送到哪个设备。当一台设备收到一个数据包时,它会查看路由表或转发表,以确定应该将数据包发送到哪个接口或设备,这就需要使用表项(Entry)来描述每个目标的路径。

2023-05-02 12:23:19 3308 1

原创 【数据结构】线性表

【数据结构】线性表

2023-04-15 22:53:24 137

原创 《设计模式》装饰者模式

在装饰者模式中,有一个抽象组件(Component)接口定义了基本的操作,具体组件(Concrete Component)是实现了这个接口的对象。装饰器(Decorator)实现了这个抽象组件的接口,它持有一个指向组件对象的指针,并定义了与组件接口一致的接口。具体装饰器(Concrete Decorator)是实现了装饰器接口的对象,它可以包装一个具体组件或另一个装饰器。在装饰者模式中,所有的装饰器都遵循同一个接口,这使得它们可以互相替换和组合,从而实现非常灵活的行为扩展。是具体的装饰类,继承自。

2023-03-02 18:54:45 379

原创 《设计模式》模板方法

模板方法是一种行为型设计模式,用于定义一个算法的框架,而将一些步骤的实现留给子类来完成。模板方法在基类中定义了一个模板方法,该方法确定了算法的基本结构,然后将一些步骤的实现交给子类去完成。这个模板方法可以看作是一个“模板”,即算法的框架。具体实现则由子类来完成。模板方法的优点有:提高了代码的复用性:将一些公共的代码放在基类中,避免了重复的代码,提高了代码的复用性。提高了代码的可维护性:将一些公共的代码放在基类中,便于修改和维护。实现了对扩展开放、对修改关闭的原则:基类中定义的模板方法固定了算法的

2023-02-27 21:40:52 342

原创 《设计模式》适配器模式

适配器(Adapter)是一种结构型设计模式,它允许我们将一个类的接口转换成另一个类的接口,从而使得原本由于接口不兼容而无法合作的类能够一起工作。在本例中,我们将实现一个适配器,将一个现有的类的接口转换成目标类的接口。假设我们有一个名为Adaptee的类,它有一个名为现在,我们需要将Adaptee类的接口转换成目标类的接口,该目标类需要具有一个名为Request()的方法。我们可以使用适配器模式来实现这一点。然后,我们定义一个适配器类,该类继承自目标类并包含一个指向Adaptee。

2023-02-26 08:59:28 372 1

原创 《设计模式》命令模式

命令模式(Command Pattern)是一种行为型设计模式,它将请求和处理分开,使得请求发送者和接收者解耦,从而降低系统的耦合度。在命令模式中,请求被封装为一个独立的对象,并且将其参数化,以便在不同的请求中传递不同的参数。命令模式中的对象包括:请求者(Invoker):负责向命令对象发起请求,并将命令对象设置为接收者的命令。命令(Command):封装了一次请求,包括请求的接收者和对接收者的操作。命令对象可以执行操作、撤销操作和恢复操作。接收者(Receiver):真正执行命令操作的对象。接收者

2023-02-25 20:32:30 679 1

原创 《设计模式》单例模式

单例模式是一种常用的设计模式,其主要优点有:提供了对唯一实例的全局访问。单例模式保证了整个系统中只有一个实例,这样就可以方便地对该实例进行访问和操作,避免了多个实例之间的冲突和不一致。避免了重复创建实例。在某些场景下,创建某些对象的代价很高,比如需要加载大量数据或初始化一些复杂的对象,如果每次都创建新的实例,会严重影响系统性能。使用单例模式可以避免重复创建实例,提高系统的性能和效率。灵活性好,易于扩展。单例模式在整个系统中只存在一个实例,这样可以方便地对该实例进行控制和管理,比如可以对该实例进行缓存

2023-02-24 12:58:20 393

原创 《设计模式》工厂模式

工厂模式又分为简单工厂(Simple Factory)、工厂方法(Factory Method)和抽象工厂(Abstract Factory)都是常用的创建型设计模式,它们的主要区别如下:简单工厂:由一个工厂类根据传入的参数来决定创建哪一种产品类的对象。简单工厂适用于对象的创建比较简单,且客户端只需要知道传入的参数即可获取相应的对象的场景。工厂方法:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法模式适用于需要一组相关对象的场景,客户端不需要知道它所使用的对象的具体类型,只需要知道创建对

2023-02-23 19:05:09 351

原创 静态库和动态库的生成和编译

静态库和动态库是两种不同的代码库,它们之间的区别主要在于如何链接和加载代码。静态库是一组目标文件(Object File)的集合,它们被打包成一个单独的文件。在编译时,静态库的代码被复制到可执行文件中,使得可执行文件包含了所有需要的代码。因此,静态库在链接时会增加可执行文件的大小,但是可以避免对库的依赖性。每次修改静态库的源代码,都需要重新编译整个可执行文件。动态库也是一组目标文件的集合,但是它们被打包成一个单独的共享库文件,扩展名为.so(Linux) 或 .dll(Windows)。

2023-02-22 22:20:30 765

原创 《设计模式》观察者模式

观察者模式是一种行为型设计模式,它定义了一种一对多的依赖关系,让多个观察者对象可以同时监听和相应被观察者对象的状态变化,以达到解耦和复用的目的。

2023-02-21 20:16:25 686

原创 《设计模式》策略模式

策略模式是一种行为型设计模式,它定义了一系列算法,将每个算法都封装起来,并且使它们之间可以互换。策略模式让算法的变化独立于使用算法的客户。

2023-02-20 21:53:30 316

原创 java中的接口用C++怎么理解

看设计模式时,书中以java举例,其中使用了java的接口,但本人却是C++选手,对java也不了解,故此文来学习理解。

2023-02-18 14:30:00 293

原创 Proxy lab

测试结果如下,顺利拿下满分。本实验和上一个malloclab实验就不是一个级别的,可以说此实验是很简单的,也就比datalab略难一下。由于本身也有一些web服务器的学习经验,所以做起来还是比较轻松的,但此实验无疑新手练习多线程和并发的好实验。至此CSAPP的最后一个lab也完成了,一共8个,除开malloclab得了98分外,其他7个实验均拿下满分。全部lab见这里。

2023-02-17 10:24:15 1310

原创 CSAPP Malloc Lab

在这个实验室中,您将为C程序编写一个动态存储分配器,即您自己版本的、和例程,实现一个正确,高效和快速的分配器。本实验性能指标有两个方面,内存利用率和吞吐量,这两个方面都是动态存储分配器优秀与否的重要衡量指标,我们的分配器需要在吞吐量和内存利用率直接取得平衡以获取更高的分数。若从官网中下载的实验文件,缺少测试文件,可从这里下载。本实验的代码中使用了大量的宏和指针,需要特别小心。此外,为方便调试程序以及便利地对比各个版本的差异,使用了宏进行条件编译。完成实验的方法有多种,下面主要根据书中介绍的分配器进行编码。隐

2023-02-04 08:00:00 871

原创 CSAPP Shell Lab

本实验的目的是更加熟悉过程控制和信号的概念。 您将通过编写一个支持作业控制的简单 Unix shell 程序来完成此操作。我们要做的是填写`tsh.c`文件的空函数,完善其内容,使其达到我们预期的目的。详细的需要实现的功能请查看实验文档。根据文档的提示,我们可以根据测试文件`tracei.txt`来从易到难一步一步实现相应功能,通过`make testi`和`make rtesti`对比输出内容判断相应功能是否正确实现。做之前先看一遍已经给实现好的辅助函数一遍后续解题正确使用,并且要仔细看实验文档。

2023-01-12 13:31:31 1155 2

原创 CSAPP Cache Lab

Part A部分比较简单,直接模拟即可,要说难的话,可能是参数的读入,以及整体框架的设计。Part B部分有些难度,但解题过程还算顺利,而且也十分有趣,特别是对miss次数的准确分析,对cache高速缓存的运行方式有了更深的理解,收获较大(网上没找到准确分析miss次数以及为什么要选16×16分块的文章)。

2023-01-03 08:30:00 1320 3

原创 CSAPP Architecture Lab PartC满分

Part A 和 Part B部分都非常容易,但Part C想要拿满分就比较困难,可能需要各种各样的优化。原本对于本章的内容自我感觉学的也是一知半解,但经过此实验,解题过程遇到不解的需要经常翻书,以及对家庭作业部分进行学习,加深了对本章的理解。明白了流水线化如何让不同的阶段并行操作,如何尽可能提高系统的吞吐量。

2022-12-20 08:15:00 1646 5

原创 C++ MySQL Error 1366 incorrect string value引发的认识

在使用MySQL C++ API编写程序时,由于用到了中文,导致出现了MySQL error 1366 incorrect string value 问题,但令我同样不解的是我用同样的语句在cmd下可以正常执行。(MySQK1366 报错如下如下:虽然可以很容易发现时字符集编码的问题,也确实是这个问题,这也是第一次编写程序遇到,虽然找问题解决方法很痛苦,但对字符集编码以及跨平台有了更深的了解。

2022-12-11 08:15:00 631

原创 Attack Lab

从下载完所需实验包后,内有官方文档以及.tar压缩包,使用解压后,得到如下文件kinclude:attacksattacks我们还是将答案保存在answer.txt,这里运行要用-q,(参考官方文档)毕竟不是 CMU 的学生,-q的作用:。这次的 lab 要仔细看官方的文档,里面是题目的要求,也包含解题指导,对解决问题很有帮助。这次 lab 就是输入攻击字符串,实现调用函数等目的,包含了对栈破坏,注入代码,ROP 攻击等方法,说明了栈溢出的危害。这里要使用。

2022-10-23 07:30:00 637 1

原创 关于整数原反补的一些认识

计算机中存储的数据都是以补码的形式存储的,计算机中的整数有无符号数和有符号数之分。最常见的有符号数的计算机表示方式就是补码形式,其次还有原码和反码两种表示形式,之所以会有不同的表示形式,是由于各自的解释方式不同。无符号数只有唯一的解释方法。因为正数按照上述的表示方法形成的二进制结果都相同,所以称正数的原反补相同,并不是特殊规定。如果你疑惑正数的原反补为什么相同,那大概你会查到“规定正数的原反补相同”这样的字眼。但其实只要了解原反补码的表示方法就一目了然了。所以为什么计算机要采用补码呢?

2022-09-30 08:00:00 238 3

原创 Ubuntu20.0下安装MySQL8.0

时间:2022.9.20我的linux版本为20.04.1,可通过uname -a查看。所安装的MySQL版本为8.0安装完毕后,可通过mysql -V查看。目的为记录安装过程,以及其中遇到的一些问题。如果先前安装过mysql,想要重新安装,可使用如下命令完全卸载清理mysql。

2022-09-21 09:01:30 2245 5

原创 环形链表找入环点证明

环形链表找入环点 快慢指针 双指针

2022-08-29 15:21:56 193 3

原创 CSAPP Bomb Lab

bomb lab给了我们一个bomb的可执行文件,以及一个bomb.c的源文件,不过这个文件只是程序的逻辑逻辑框架,无法编译。进入bomb.c可以看到程序的流程是有6个phase,先读取一行输入,再进入phase判断输入是否正确,正确就可以进入下一关,否则炸弹就会爆炸。

2022-08-19 15:45:00 580

原创 CSAPP Data Lab

data lab主要考察位运算,补码,浮点数等相关内容,此lab能检验对整型,浮点数存储方式的理解,以及位运算的各种妙用,能够对整数浮点数的实际使用的过程中,对可能出现的“怪异”结果知其所以然。以下13个函数即是本lab需要完成的内容,根据函数上方的注释及可用操作符限制补充完函数即可,部分函数不允许任何超过8bit的常量,详细内容查看相关注释。lab资源下载。对于一些可能用到或了解的知识在最下方列出。...

2022-08-07 18:05:15 326

原创 二分查找边界控制

二分边界控制 二分模板

2022-07-10 19:42:06 204 2

空空如也

空空如也

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

TA关注的人

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