自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(436)
  • 资源 (1)
  • 收藏
  • 关注

原创 “卓见杯”郑州轻工业大学第十五届程序设计大赛暨河南省高校邀请赛题解

如果把形成的环缩点的话就会变成拓扑序列,首先要找到数字最大的那几个点,把他们入队,然后遍历他们的下一个点,找到下一个点里的最大值,再把等于最大值的下一个点入队,这样贪心一定能得到最优解,循环9次,即可找到最大的那个9位数。枚举gcd时如果a,b数组还有公约数,根据贪心,一定会枚举到更大的公约数,把答案更新。因此在处理 回答字符串的时候,直接枚举,贪心找出最长的问题,放到回答问题的哈希表中。贪心:枚举左端点,对于左端点相同的区间,优先选择右端点比较小的。,则从堆里找出右端点最大的去除,直到。

2023-04-05 14:58:46 5348 2

原创 2023年 ZZU ACM 招新赛暨选拔赛题解

先按照每个人的最低分加入到总成绩,用两个数组记录,一个原始数组,一个按总成绩从大到小排序的数组。用hh记录长度为k窗口的左端点,遍历右端点每次求出长度为k的区间中的没处理好的调料数量。这里判断时需要注意从能到达的点往外扩展时 方向是反着的,判断能否到达需要反着判断。倒着思考,从终点往周围扩展,判断能否到达,把能到达的点放入队列,接着扩展。每次用k减去 那个小的,维护一个双指针,直到k小于0,或者双指针相遇。遍历每一个人,用二分在在已经排序的数组里找到比它的数的数量就是排名。如果剩下的是奇数 减去c。

2023-03-19 18:02:37 6257 3

原创 2022学年第一学期郑州大学ACM招新赛&选拔赛

2022学年第一学期郑州大学ACM招新赛&选拔赛A SW的与众不同数组B WASD机器人C SW的糖果树(困难版本)D SW的七星光芒剑E 井字棋游戏F SW的糖果树(简单版本)G 凑数字 H 旋转数组 I 最小字典序序列J SW玩扫雷K 亮度L SW的妙妙区间

2022-10-29 23:17:23 3722 3

原创 2021卓见杯第三届CCPC河南省省赛所有题超详细题解附加榜单真题解析,简单代码+详细注释+思想,要看的,补题的速速点进来 2021 10.30

文章中可能有不太恰当地方,还请大家指正。是否因为出题人的简短题解而发愁?,是否看不懂出题人的变态模板标程?是否因为自己是小白而苦恼?来看这片文章,帮助你解决这些问题如果有收获请点个赞再走吧,还有几道题没来得及写上去,之后会慢慢补上的1001.收集金币[题目链接](http://acm.zzuli.edu.cn/problem.php?id=282dp算法:动态规划状态dp思路:f[i][0]表示前i个操作中一直没有跳的最大金币数量f[i][1]表示前i个操作中已经跳过或者现在跳的最大金币数量

2021-11-02 22:43:38 9241 12

原创 Linux环境下C++代码编译过程

解释说明:在链接阶段,链接器将所有的目标文件及其所依赖的库文件链接在一起,生成最终的可执行文件。通过这些阶段,从 C++ 源代码到最终的可执行文件,每个阶段都产生了不同类型的中间文件,经过链接阶段将这些文件组合起来,生成了可以在计算机上运行的可执行文件。输入文件:汇编后的文件(.o 或 .obj 文件)和所需的库文件(.lib、.dll 或 .a 文件)输出文件:.exe 文件(在 Windows 系统上),或者没有扩展名的文件(在类 UNIX 系统上)输入文件:编译后的文件(.o 或 .obj 文件)

2024-04-24 10:15:18 380

原创 2024年3月ZZUACM 招新赛题解

另外作为魔法森林,魔法传送阵是其特色,具体的来说若字符是大写的英文字母,则表示当前位置为魔法传送阵,可以保证的是魔法传送阵都是成对存在的,也就是说某个英文字母表示的魔法传送阵一旦出现,一定会在魔法森林中出现两个,且只会出现两个。另外作为魔法森林,魔法传送阵是其特色,具体的来说若字符是大写的英文字母,则表示当前位置为魔法传送阵,可以保证的是魔法传送阵都是成对存在的,也就是说某个英文字母表示的魔法传送阵一旦出现,一定会在魔法森林中出现两个,且只会出现两个。的最小,都可以考虑二分思路。(若无法到达则输出-1)

2024-03-09 22:34:41 1299 3

原创 C++可以函数重载而C不可以的原因

函数重载是指在同一个作用域内,可以定义多个函数,它们具有相同的名称但是参数列表不同。函数重载的主要原理是函数的签名不同,而在 C++ 中,函数签名包括函数的名称和参数列表。而在 C 中,函数的标识仅依赖于函数的名称,不包括参数信息,这是导致 C 不支持函数重载的关键原因。

2023-12-06 23:18:10 625

原创 设计多级菜单的数据结构(C语言实现)

参考手机设置菜单,设计多级菜单的数据结构,并将菜单内容打印出来。|–|–[菜单121]|–I–|–(选项c)|–|–|–(选项d)

2023-11-30 09:46:42 1291

原创 HTTP /1.0 /1.1 /2.0 /3.0改变和区别

HTTP(Hypertext Transfer Protocol)是一种用于传输超文本的协议,它是Web上数据通信的基础。不同版本的HTTP协议有一些重要的变化和改进。

2023-11-29 15:16:24 712

原创 用Python实现一个全网可下载的Linux命令流程

确保你的代码和文档是准备好的,并根据需要添加适当的许可证信息和文档。这个过程中涉及到的详细设置可能会因项目的复杂性而有所不同。在 main.py 文件中编写你的自定义命令的代码。输出应该是 “Hello, this is my custom command!创建一个 setup.py 文件,用于描述你的包和如何安装它。main.py 文件将包含你的自定义命令的实现。这将在 dist/ 目录下生成一个源分发包文件。这将上传你的包到 PyPI。

2023-11-20 15:36:53 143

原创 C++20并发编程之线程闩(std::latch)和线程卡(std::barrier)

std::latch类是一种基于std::ptrdiff_t类型的倒计数器,可用于同步线程。计数器的值在创建时进行初始化。线程可以在 latch 上阻塞,直到计数器减少到零为止。无法增加或重置计数器,这使得 latch 成为一次性的屏障。std::latch的成员函数的并发调用(除了析构函数)不会引入数据竞争。与std::barrier不同,std::latch可以被参与的线程多次递减。

2023-11-18 16:36:06 591

原创 C++异步并发编程future、promise和packaged_task三者的区别和联系

在C++中,std::future、std::promise和std::packaged_task是用于并发编程的工具,它们用于处理异步操作、线程间通信以及任务的封装。

2023-11-16 11:51:41 137

原创 C++并发编程Mutex、Condition Variable、future区别和特点

在C++中,互斥量(Mutex)、条件变量(Condition Variable)、期望(std::future 和 std::promise)是用于实现并发编程的三个关键工具。

2023-11-16 10:38:53 831

原创 C++并发编程future模板类

在上述示例中,std::async 创建了一个异步任务 add,并返回了一个 std::future 对象 future_result。在C++中,std::future 是一个用于处理异步任务的模板类,它提供了一种在一个线程中获取另一个线程(异步任务)的结果的机制。std::future 通常与 std::promise 和 std::packaged_task 一起使用,这些类都属于 C++11 引入的异步编程工具。异步任务的结果会被存储在 std::future 对象中。

2023-11-16 09:38:45 71

原创 C++ std::ref函数的三大应用场景

在这个例子中,std::for_each 要求传递一个可调用对象,而 modifyValue 是一个需要引用传递的函数。通过使用 std::ref,我们可以将 modifyValue 引用传递给 std::for_each。在这个例子中,genericFunction 使用 std::reference_wrapper 作为参数类型,这使得它可以接受任何类型的引用。总的来说,std::ref 主要用于在需要引用传递而不是值传递的场景中,提供一种方便而灵活的方式。

2023-11-15 21:33:57 542

原创 C++ 并发编程中condition_variable和future的区别

现在,门这边的小朋友要等着看门那边的小朋友什么时候准备好,准备好了就告诉门这边可以进来了。门这边的小朋友就用 std::condition_variable 等待门那边小朋友的通知,门那边小朋友准备好了就通知过来。这样你就必须一直等着,无法做其他事情。”这里,你是主线程,小助手是异步线程,你用 std::future 去拿到小助手的结果,看他是否买到了果汁。总的来说,它们分别解决不同的问题,std::condition_variable 用于等待通知,而 std::future 用于异步任务的结果获取。

2023-11-14 20:32:06 127

原创 C++用条件变量实现线程安全的queue容器

【代码】C++用条件变量实现线程安全的queue容器。

2023-11-14 17:54:22 182

原创 C++用锁实现线程安全的stack容器

当这个系统处在重度负荷,或有严重的资源限制的情况下,这种内存分配就会失败,所以vector的拷贝构造函数可能会抛出一个std::bad_alloc异常。当pop()函数返回“弹出值”时(也就是从栈中将这个值移除),会有一个潜在的问题:这个值被返回到调用函数的时候,栈才被改变;如果事情真的发生了,要弹出的数据将会丢失;std::stack的设计人员将这个操作分为两部分:先获取顶部元素(top()),然后从栈中移除(pop())。这样,在不能安全的将元素拷贝出去的情况下,栈中的这个数据还依旧存在,没有丢失。

2023-11-14 17:21:17 183

原创 C++ 构造函数不能是虚函数的原因

构造函数不能被声明为虚函数的主要原因涉及到对象的创建和初始化过程以及虚函数的工作机制。

2023-11-07 20:14:24 245

原创 C++虚函数表和虚函数指针

C++ 虚函数表(Virtual Function Table,VTBL)是在编译期确定的,而不是运行时。每个类都有一个自己的虚函数表,而派生类会继承基类的虚函数表并在其上进行扩展。虚函数表是用来实现多态(polymorphism)的关键机制之一。

2023-11-07 20:12:37 144

原创 thread类中构造的函数参数必须是可拷贝的

在你的代码中,你尝试在线程中传递一个整数 3 和一个 std::string 引用 s,这是不允许的,因为 std::thread 会尝试拷贝参数,而 std::string 是不可拷贝的。这段代码会导致编译错误,因为在C++中,如果你尝试在线程(std::thread)中传递参数,那么这些参数必须是可拷贝的,或者你需要使用 std::ref 来传递可引用的参数。要修复这个问题,你可以使用 std::ref 来传递 s 作为引用,这样可以让线程操作同一个 std::string 对象,而不是拷贝它。

2023-11-02 19:15:39 181

原创 C++ detach线程的归属权和控制权交给runtime library的原因

在C++中,std::thread的detach操作将线程的归属权和控制权都转移给了C++运行时库(runtime library)。这是因为detach操作的目的是告诉C++运行时库,你不再关心这个线程的状态,它可以在后台独立运行,而不需要等待主线程结束。这是一种线程管理策略,它适用于那些不需要等待子线程完成的情况。

2023-11-01 18:50:22 142

原创 线程和进程的优缺点

轻量级: 线程相比于进程具有较小的开销,包括创建和销毁线程的开销,以及线程切换的开销。这使得线程更适合处理大量并发任务,并可以实现快速的任务切换和响应。共享资源: 线程在同一进程内共享相同的内存空间,这意味着线程之间可以直接共享数据和通信,而不需要额外的机制。这样的共享对于在应用程序内共享数据和状态非常方便。协同执行: 线程适合于协同执行任务,多个线程可以在同一地址空间中协同工作,并共享数据和资源,以实现更高效的协同操作。并行计算: 线程可以更有效地利用多核处理器并行执行任务,从而提高计算性能和效率。

2023-10-22 14:25:54 485

原创 检测输出线程名脚本

【代码】检测输出线程名脚本。

2023-10-10 10:11:08 75

原创 常量左值引用作为形参来接收右值引用实参所带来的问题

由于常量左值引用只能绑定到左值,编译器将 std::move(x) 视为左值引用,而不是右值引用。当你将右值引用传递给常量左值引用形参时,由于右值引用是一个右值,而常量左值引用只能绑定到左值,编译器将通过引用折叠将右值引用实参视为左值引用。我们使用了右值引用形参来接收右值引用实参,从而保留了原始的右值特性,并允许对其使用移动语义。使用常量左值引用形参来接收右值引用实参,并且没有使用完美转发,会导致右值引用实参被视为左值,从而丧失了移动语义和可能引发不必要的拷贝操作的机会。这可能导致性能下降和不正确的行为。

2023-10-06 16:22:28 125

原创 僵尸进程的产生原因和解决方法

当一个进程(通常是父进程)创建了一个子进程,但是在子进程终止后,父进程没有及时处理子进程的终止状态,就会导致僵尸进程的产生。这个时候,子进程虽然已经终止,但是其进程表中的进程状态信息仍然被保留,直到父进程通过相关系统调用(如wait()或waitpid())来获取子进程的终止状态。如果父进程没有调用这些函数,子进程就会一直处于僵尸状态,占用系统资源。即。

2023-10-04 11:05:27 1240

原创 C++左右值及引用

如果不是右值引用,因为函数返回值本身是右值,X()默认构造一次,然后return X()时再拷贝一份给返回值,返回值再拷贝给main中的变量,经过1次构造和2次拷贝构造。而如果直接使用右值引用,直接延长返回值的生命周期,提高性能,在大内存情况下,优化效果较为明显。这里需要注意的是,字符串常量是特例,字符串常量也是左值,可以取地址,而数字常量则是右值。赋值给临时变量,临时变量在+1,而临时变量是将亡值,是左值,因为自身+1,本身是左值,&++i不会报错。简单记法:能取地址的是左值,不能取地址的是右值。

2023-10-03 20:33:21 153

原创 C++指针危险的原因

指针可以具有空值(nullptr),也可以指向任何内存地址,包括未分配或已释放的内存(野指针)。引用在定义时必须初始化,并且始终引用有效的对象,因此不存在这种问题。如果忘记释放通过指针分配的内存,将导致内存泄漏。引用不涉及内存分配,因此不存在这种类型的问题。:悬垂指针是指指向已被销毁的对象或超出了作用域的对象的指针。:指针可以进行算术运算,如递增和递减,以移动指针指向的位置。:指针需要更多的手动管理和谨慎,包括内存分配和释放,以及确保指针有效性的检查。引用更简单,因为它们不需要这些额外的步骤和检查。

2023-10-03 18:10:04 392

原创 VScode配置文件launch.json 和 tasks.json配置项详细说明

tasks.json为编译配置文件。

2023-10-03 15:05:45 1361 1

原创 进程和线程的区别 && 线程之间共享的资源

进程具有独立的地址空间和资源,而线程共享进程的资源和内存空间。线程的创建和销毁开销较小,适合并发执行和共享数据的场景,而进程的创建和销毁开销较大,适合隔离和独立执行的场景。1.地址空间:进程具有独立的地址空间,包括代码、数据和堆栈等,不同进程之间的地址空间是隔离的,一个进程无法直接访问另一个进程的内存。3.创建和销毁开销:创建和销毁进程的开销相对较大,需要操作系统分配独立的地址空间和资源。2.文件描述符:线程共享进程的文件描述符,一个线程打开的文件可以被其他线程读取和写入。

2023-10-03 11:18:56 446

原创 VisualStudio 编写C++项目常见问题解决

配置属性->调试->环境环境忘记配置。

2023-09-22 18:24:54 166

原创 Git常见场景命令总结

【代码】Git常见场景命令总结。

2023-09-22 13:04:50 211

原创 多语言多平台给线程增加命名

在实际开发中,你需要查看相关文档以确定如何为线程设置名称,以便更好地满足你的调试和诊断需求。在许多编程语言和多线程库中,可以为线程分配一个名称以便更好地识别和调试线程。在 C++ 中,你可以为线程设置名称,但这通常需要依赖于特定的编译器和操作系统。在这个示例中,我们首先创建了一个线程对象,然后使用操作系统和编译器特定的方法来设置线程名称。在 Java 中,你可以为线程设置名称,通常在创建线程对象后立即设置。在这里,我们首先创建了一个线程对象,然后使用 setName 方法为线程设置名称为。

2023-09-21 16:56:49 117

原创 文件权限全为???且WSL的Ubuntu中code .打开VScode失效的解决办法

文件读取权限导致的文件查找不到. 挂载过程中出现问题。

2023-09-16 23:47:55 180

原创 HTTP响应报文状态码

HTTP(Hypertext Transfer Protocol)状态码是在进行HTTP通信时,服务器向客户端返回的三位数字代码,用于表示请求的处理结果。8.304 Not Modified:客户端使用缓存的版本请求资源,服务器返回资源未修改,可直接使用缓存。1.100 Continue:请求已被服务器接收,客户端应继续发送请求的剩余部分。4xx(客户端错误状态码):代表请求包含错误,服务器无法处理。5xx(服务器错误状态码):代表服务器在处理请求时发生错误。

2023-08-28 16:47:58 179

原创 计算机网络MTU和MSS的区别

MTU表示网络链路中能够传输的最大数据包大小,而MSS表示TCP报文段中TCP数据字段的最大大小。当发送方要传输的数据超过了网络链路的MTU时,就需要将数据包进行分片(Fragmentation),将大数据包分成较小的数据片段发送。较小的MSS可以减少报文段的大小,避免分片和重组的开销,但可能会导致较低的有效负载和网络吞吐量。TCP协议通过动态调整MSS值来适应不同的网络环境,例如考虑到IP头部长度、TCP头部长度以及可选的TCP选项的大小,以保持最佳的数据传输效率。

2023-08-28 16:30:04 1597

原创 数据库索引使用时机---适合建立、不适合建立、索引失效总结

8.is nul可以使用索引, is not nul无法使用索引。11.在多个字段都要创建索引的情况下,联合索引优于单值索引。1.在where中使用不到的字段,不要设置索引。9.区分度高(散列性高)的列适合作为索引。10.使用最频繁的列放到联合索引的左侧。10.OR前后存在非索引的列,索引失效。3.有大量重复数据的列上不要建立索引。4.避免对经常更新的表创建过多的索引。6.删除不再使用或者很少使用的索引。2.数据量小的表最好不要使用索引。7.不等于(=或者

2023-08-28 13:55:53 205

原创 鲁棒性简述

总之,鲁棒性是系统、算法或模型的一种性质,它能够在面对异常、错误或不良条件时保持高效运行、正确输出结果或提供适当的错误处理。鲁棒性的设计和实现可以提高系统的可靠性、可用性和适应性,增强用户体验,并降低系统故障和错误的风险。一个鲁棒性强的系统能够在面对异常、噪声、错误或意外情况时,仍能够保持高效的运行或输出可接受的结果。5.错误隔离和恢复:鲁棒性系统能够将错误隔离到特定模块或组件,并尽可能限制错误的影响范围。鲁棒性是在设计和开发系统时要考虑的一个重要特性,因为现实世界中的环境和数据往往是不完美和难以预测的。

2023-08-27 15:54:29 582

原创 Linux vmstat命令

通过观察vmstat命令输出的各个列,您可以获取有关系统内存、进程、IO和CPU活动的实时统计信息,这些信息有助于诊断和调优系统性能问题。时间间隔:指定两个报告之间的时间间隔(以秒为单位),如果省略,默认为2秒。:每秒从交换空间读取到内存的数据大小(单位为KB)。:每秒从磁盘写入交换空间的数据大小(单位为KB)。:已使用的虚拟内存大小(单位为KB)。:用作缓冲区的内存大小(单位为KB)。:用户空间程序使用CPU的时间百分比。:空闲的物理内存大小(单位为KB)。:用作缓存的内存大小(单位为KB)。

2023-08-27 15:51:20 487

原创 查看线程池性能和吞吐量的参数指标

现实开发中,测试给了压力测试数据,开发这边就看看TPS,QPS,服务器响应,失败率。失败率高的话,再跑一次。Linux Ubuntu环境下。

2023-08-27 15:45:31 382

2021 10.30河南省省赛.pdf

2021 10.30河南省省赛.pdf

2021-10-30

空空如也

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

TA关注的人

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