- 博客(437)
- 资源 (1)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 “卓见杯”郑州轻工业大学第十五届程序设计大赛暨河南省高校邀请赛题解
如果把形成的环缩点的话就会变成拓扑序列,首先要找到数字最大的那几个点,把他们入队,然后遍历他们的下一个点,找到下一个点里的最大值,再把等于最大值的下一个点入队,这样贪心一定能得到最优解,循环9次,即可找到最大的那个9位数。枚举gcd时如果a,b数组还有公约数,根据贪心,一定会枚举到更大的公约数,把答案更新。因此在处理 回答字符串的时候,直接枚举,贪心找出最长的问题,放到回答问题的哈希表中。贪心:枚举左端点,对于左端点相同的区间,优先选择右端点比较小的。,则从堆里找出右端点最大的去除,直到。
2023-04-05 14:58:46
5435
2
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 2023年 ZZU ACM 招新赛暨选拔赛题解
先按照每个人的最低分加入到总成绩,用两个数组记录,一个原始数组,一个按总成绩从大到小排序的数组。用hh记录长度为k窗口的左端点,遍历右端点每次求出长度为k的区间中的没处理好的调料数量。这里判断时需要注意从能到达的点往外扩展时 方向是反着的,判断能否到达需要反着判断。倒着思考,从终点往周围扩展,判断能否到达,把能到达的点放入队列,接着扩展。每次用k减去 那个小的,维护一个双指针,直到k小于0,或者双指针相遇。遍历每一个人,用二分在在已经排序的数组里找到比它的数的数量就是排名。如果剩下的是奇数 减去c。
2023-03-19 18:02:37
6384
3
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 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
3797
3
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 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
9427
12
原创 WAWA鱼曲折的大学四年回忆录
回头看,发现已经走过那么长的路了,尽管大多数时刻都未能得偿所愿,但都做了当下认为最正确的选择,虽有遗憾不甘,但始终如一,不断朝自己目标靠近。大学四年的收获,转换成五句话就是:1、做一个长期主义者,沉下心去,保持专注2、热爱技术,深入技术,有技术追求3、丢掉胆怯和自卑,内心坚定,勇于尝试,抓住机会,不留遗憾4、多问,多交流,多做,多思考5、保持活跃,尽可能的展示自己,贡献自己的力量。
2024-07-07 19:52:24
2157
11
原创 Linux环境下C++代码编译过程
解释说明:在链接阶段,链接器将所有的目标文件及其所依赖的库文件链接在一起,生成最终的可执行文件。通过这些阶段,从 C++ 源代码到最终的可执行文件,每个阶段都产生了不同类型的中间文件,经过链接阶段将这些文件组合起来,生成了可以在计算机上运行的可执行文件。输入文件:汇编后的文件(.o 或 .obj 文件)和所需的库文件(.lib、.dll 或 .a 文件)输出文件:.exe 文件(在 Windows 系统上),或者没有扩展名的文件(在类 UNIX 系统上)输入文件:编译后的文件(.o 或 .obj 文件)
2024-04-24 10:15:18
705
原创 2024年3月ZZUACM 招新赛题解
另外作为魔法森林,魔法传送阵是其特色,具体的来说若字符是大写的英文字母,则表示当前位置为魔法传送阵,可以保证的是魔法传送阵都是成对存在的,也就是说某个英文字母表示的魔法传送阵一旦出现,一定会在魔法森林中出现两个,且只会出现两个。另外作为魔法森林,魔法传送阵是其特色,具体的来说若字符是大写的英文字母,则表示当前位置为魔法传送阵,可以保证的是魔法传送阵都是成对存在的,也就是说某个英文字母表示的魔法传送阵一旦出现,一定会在魔法森林中出现两个,且只会出现两个。的最小,都可以考虑二分思路。(若无法到达则输出-1)
2024-03-09 22:34:41
1529
3
原创 C++可以函数重载而C不可以的原因
函数重载是指在同一个作用域内,可以定义多个函数,它们具有相同的名称但是参数列表不同。函数重载的主要原理是函数的签名不同,而在 C++ 中,函数签名包括函数的名称和参数列表。而在 C 中,函数的标识仅依赖于函数的名称,不包括参数信息,这是导致 C 不支持函数重载的关键原因。
2023-12-06 23:18:10
704
原创 设计多级菜单的数据结构(C语言实现)
参考手机设置菜单,设计多级菜单的数据结构,并将菜单内容打印出来。|–|–[菜单121]|–I–|–(选项c)|–|–|–(选项d)
2023-11-30 09:46:42
1921
原创 HTTP /1.0 /1.1 /2.0 /3.0改变和区别
HTTP(Hypertext Transfer Protocol)是一种用于传输超文本的协议,它是Web上数据通信的基础。不同版本的HTTP协议有一些重要的变化和改进。
2023-11-29 15:16:24
744
原创 用Python实现一个全网可下载的Linux命令流程
确保你的代码和文档是准备好的,并根据需要添加适当的许可证信息和文档。这个过程中涉及到的详细设置可能会因项目的复杂性而有所不同。在 main.py 文件中编写你的自定义命令的代码。输出应该是 “Hello, this is my custom command!创建一个 setup.py 文件,用于描述你的包和如何安装它。main.py 文件将包含你的自定义命令的实现。这将在 dist/ 目录下生成一个源分发包文件。这将上传你的包到 PyPI。
2023-11-20 15:36:53
152
原创 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
894
原创 C++异步并发编程future、promise和packaged_task三者的区别和联系
在C++中,std::future、std::promise和std::packaged_task是用于并发编程的工具,它们用于处理异步操作、线程间通信以及任务的封装。
2023-11-16 11:51:41
176
原创 C++并发编程Mutex、Condition Variable、future区别和特点
在C++中,互斥量(Mutex)、条件变量(Condition Variable)、期望(std::future 和 std::promise)是用于实现并发编程的三个关键工具。
2023-11-16 10:38:53
898
原创 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
83
原创 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
652
原创 C++ 并发编程中condition_variable和future的区别
现在,门这边的小朋友要等着看门那边的小朋友什么时候准备好,准备好了就告诉门这边可以进来了。门这边的小朋友就用 std::condition_variable 等待门那边小朋友的通知,门那边小朋友准备好了就通知过来。这样你就必须一直等着,无法做其他事情。”这里,你是主线程,小助手是异步线程,你用 std::future 去拿到小助手的结果,看他是否买到了果汁。总的来说,它们分别解决不同的问题,std::condition_variable 用于等待通知,而 std::future 用于异步任务的结果获取。
2023-11-14 20:32:06
152
原创 C++用锁实现线程安全的stack容器
当这个系统处在重度负荷,或有严重的资源限制的情况下,这种内存分配就会失败,所以vector的拷贝构造函数可能会抛出一个std::bad_alloc异常。当pop()函数返回“弹出值”时(也就是从栈中将这个值移除),会有一个潜在的问题:这个值被返回到调用函数的时候,栈才被改变;如果事情真的发生了,要弹出的数据将会丢失;std::stack的设计人员将这个操作分为两部分:先获取顶部元素(top()),然后从栈中移除(pop())。这样,在不能安全的将元素拷贝出去的情况下,栈中的这个数据还依旧存在,没有丢失。
2023-11-14 17:21:17
209
原创 C++虚函数表和虚函数指针
C++ 虚函数表(Virtual Function Table,VTBL)是在编译期确定的,而不是运行时。每个类都有一个自己的虚函数表,而派生类会继承基类的虚函数表并在其上进行扩展。虚函数表是用来实现多态(polymorphism)的关键机制之一。
2023-11-07 20:12:37
200
原创 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
198
原创 C++ detach线程的归属权和控制权交给runtime library的原因
在C++中,std::thread的detach操作将线程的归属权和控制权都转移给了C++运行时库(runtime library)。这是因为detach操作的目的是告诉C++运行时库,你不再关心这个线程的状态,它可以在后台独立运行,而不需要等待主线程结束。这是一种线程管理策略,它适用于那些不需要等待子线程完成的情况。
2023-11-01 18:50:22
177
原创 线程和进程的优缺点
轻量级: 线程相比于进程具有较小的开销,包括创建和销毁线程的开销,以及线程切换的开销。这使得线程更适合处理大量并发任务,并可以实现快速的任务切换和响应。共享资源: 线程在同一进程内共享相同的内存空间,这意味着线程之间可以直接共享数据和通信,而不需要额外的机制。这样的共享对于在应用程序内共享数据和状态非常方便。协同执行: 线程适合于协同执行任务,多个线程可以在同一地址空间中协同工作,并共享数据和资源,以实现更高效的协同操作。并行计算: 线程可以更有效地利用多核处理器并行执行任务,从而提高计算性能和效率。
2023-10-22 14:25:54
782
原创 常量左值引用作为形参来接收右值引用实参所带来的问题
由于常量左值引用只能绑定到左值,编译器将 std::move(x) 视为左值引用,而不是右值引用。当你将右值引用传递给常量左值引用形参时,由于右值引用是一个右值,而常量左值引用只能绑定到左值,编译器将通过引用折叠将右值引用实参视为左值引用。我们使用了右值引用形参来接收右值引用实参,从而保留了原始的右值特性,并允许对其使用移动语义。使用常量左值引用形参来接收右值引用实参,并且没有使用完美转发,会导致右值引用实参被视为左值,从而丧失了移动语义和可能引发不必要的拷贝操作的机会。这可能导致性能下降和不正确的行为。
2023-10-06 16:22:28
169
原创 僵尸进程的产生原因和解决方法
当一个进程(通常是父进程)创建了一个子进程,但是在子进程终止后,父进程没有及时处理子进程的终止状态,就会导致僵尸进程的产生。这个时候,子进程虽然已经终止,但是其进程表中的进程状态信息仍然被保留,直到父进程通过相关系统调用(如wait()或waitpid())来获取子进程的终止状态。如果父进程没有调用这些函数,子进程就会一直处于僵尸状态,占用系统资源。即。
2023-10-04 11:05:27
1971
原创 C++左右值及引用
如果不是右值引用,因为函数返回值本身是右值,X()默认构造一次,然后return X()时再拷贝一份给返回值,返回值再拷贝给main中的变量,经过1次构造和2次拷贝构造。而如果直接使用右值引用,直接延长返回值的生命周期,提高性能,在大内存情况下,优化效果较为明显。这里需要注意的是,字符串常量是特例,字符串常量也是左值,可以取地址,而数字常量则是右值。赋值给临时变量,临时变量在+1,而临时变量是将亡值,是左值,因为自身+1,本身是左值,&++i不会报错。简单记法:能取地址的是左值,不能取地址的是右值。
2023-10-03 20:33:21
168
原创 C++指针危险的原因
指针可以具有空值(nullptr),也可以指向任何内存地址,包括未分配或已释放的内存(野指针)。引用在定义时必须初始化,并且始终引用有效的对象,因此不存在这种问题。如果忘记释放通过指针分配的内存,将导致内存泄漏。引用不涉及内存分配,因此不存在这种类型的问题。:悬垂指针是指指向已被销毁的对象或超出了作用域的对象的指针。:指针可以进行算术运算,如递增和递减,以移动指针指向的位置。:指针需要更多的手动管理和谨慎,包括内存分配和释放,以及确保指针有效性的检查。引用更简单,因为它们不需要这些额外的步骤和检查。
2023-10-03 18:10:04
450
原创 进程和线程的区别 && 线程之间共享的资源
进程具有独立的地址空间和资源,而线程共享进程的资源和内存空间。线程的创建和销毁开销较小,适合并发执行和共享数据的场景,而进程的创建和销毁开销较大,适合隔离和独立执行的场景。1.地址空间:进程具有独立的地址空间,包括代码、数据和堆栈等,不同进程之间的地址空间是隔离的,一个进程无法直接访问另一个进程的内存。3.创建和销毁开销:创建和销毁进程的开销相对较大,需要操作系统分配独立的地址空间和资源。2.文件描述符:线程共享进程的文件描述符,一个线程打开的文件可以被其他线程读取和写入。
2023-10-03 11:18:56
520
原创 多语言多平台给线程增加命名
在实际开发中,你需要查看相关文档以确定如何为线程设置名称,以便更好地满足你的调试和诊断需求。在许多编程语言和多线程库中,可以为线程分配一个名称以便更好地识别和调试线程。在 C++ 中,你可以为线程设置名称,但这通常需要依赖于特定的编译器和操作系统。在这个示例中,我们首先创建了一个线程对象,然后使用操作系统和编译器特定的方法来设置线程名称。在 Java 中,你可以为线程设置名称,通常在创建线程对象后立即设置。在这里,我们首先创建了一个线程对象,然后使用 setName 方法为线程设置名称为。
2023-09-21 16:56:49
154
原创 HTTP响应报文状态码
HTTP(Hypertext Transfer Protocol)状态码是在进行HTTP通信时,服务器向客户端返回的三位数字代码,用于表示请求的处理结果。8.304 Not Modified:客户端使用缓存的版本请求资源,服务器返回资源未修改,可直接使用缓存。1.100 Continue:请求已被服务器接收,客户端应继续发送请求的剩余部分。4xx(客户端错误状态码):代表请求包含错误,服务器无法处理。5xx(服务器错误状态码):代表服务器在处理请求时发生错误。
2023-08-28 16:47:58
224
原创 计算机网络MTU和MSS的区别
MTU表示网络链路中能够传输的最大数据包大小,而MSS表示TCP报文段中TCP数据字段的最大大小。当发送方要传输的数据超过了网络链路的MTU时,就需要将数据包进行分片(Fragmentation),将大数据包分成较小的数据片段发送。较小的MSS可以减少报文段的大小,避免分片和重组的开销,但可能会导致较低的有效负载和网络吞吐量。TCP协议通过动态调整MSS值来适应不同的网络环境,例如考虑到IP头部长度、TCP头部长度以及可选的TCP选项的大小,以保持最佳的数据传输效率。
2023-08-28 16:30:04
1876
原创 数据库索引使用时机---适合建立、不适合建立、索引失效总结
8.is nul可以使用索引, is not nul无法使用索引。11.在多个字段都要创建索引的情况下,联合索引优于单值索引。1.在where中使用不到的字段,不要设置索引。9.区分度高(散列性高)的列适合作为索引。10.使用最频繁的列放到联合索引的左侧。10.OR前后存在非索引的列,索引失效。3.有大量重复数据的列上不要建立索引。4.避免对经常更新的表创建过多的索引。6.删除不再使用或者很少使用的索引。2.数据量小的表最好不要使用索引。7.不等于(=或者
2023-08-28 13:55:53
256
原创 鲁棒性简述
总之,鲁棒性是系统、算法或模型的一种性质,它能够在面对异常、错误或不良条件时保持高效运行、正确输出结果或提供适当的错误处理。鲁棒性的设计和实现可以提高系统的可靠性、可用性和适应性,增强用户体验,并降低系统故障和错误的风险。一个鲁棒性强的系统能够在面对异常、噪声、错误或意外情况时,仍能够保持高效的运行或输出可接受的结果。5.错误隔离和恢复:鲁棒性系统能够将错误隔离到特定模块或组件,并尽可能限制错误的影响范围。鲁棒性是在设计和开发系统时要考虑的一个重要特性,因为现实世界中的环境和数据往往是不完美和难以预测的。
2023-08-27 15:54:29
743
原创 Linux vmstat命令
通过观察vmstat命令输出的各个列,您可以获取有关系统内存、进程、IO和CPU活动的实时统计信息,这些信息有助于诊断和调优系统性能问题。时间间隔:指定两个报告之间的时间间隔(以秒为单位),如果省略,默认为2秒。:每秒从交换空间读取到内存的数据大小(单位为KB)。:每秒从磁盘写入交换空间的数据大小(单位为KB)。:已使用的虚拟内存大小(单位为KB)。:用作缓冲区的内存大小(单位为KB)。:用户空间程序使用CPU的时间百分比。:空闲的物理内存大小(单位为KB)。:用作缓存的内存大小(单位为KB)。
2023-08-27 15:51:20
568
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人