
C/C++
文章平均质量分 65
seh_sjlj
一个热爱数学证明的大学牲
展开
-
KMP算法详解
KMP算法虽然代码简单,但是理解起来还是颇为费力的,细节很多。包括next数组和k = next[k]等都是理解上的难点。所以我花了一个星期时间整理了这样一篇文章,从暴力算法开始到next数组和匹配过程,以及时间复杂度的证明和例题,希望能够完整地展示KMP算法的全貌,深入浅出地阐述KMP算法的思想。原创 2022-04-13 11:03:22 · 1953 阅读 · 0 评论 -
【C++】类构造函数、析构函数的调用顺序「完整版」
一、全局变量、静态变量和局部变量全局变量在程序开始时调用构造函数、在程序结束时调用析构函数。静态变量在所在函数第一次被调用时调用构造函数、在程序结束时调用析构函数,只调用一次。局部变量在所在的代码段被执行时调用构造函数,在离开其所在作用域(大括号括起来的区域)时调用析构函数。可以调用任意多次。下面我们通过代码进行更详细的讲解:#include <iostream>using namespace std;// 下面定义三个类,在调用构造、析构函数时进行输出class A{原创 2022-02-25 12:30:56 · 11258 阅读 · 3 评论 -
C++ Primer Plus(最新版)附录D:运算符优先级【全】
C++ Primer Plus运算符优先级原创 2021-12-21 18:32:39 · 907 阅读 · 0 评论 -
洛谷P7918 【洛谷月赛LGR-096 Div.2 T2】 [Kubic] Lines题解
这道题是普及-,结果我比赛时想了整整一个小时。。。果然我还是太菜了啊QAQ题目大意解题思路佬曰:“有人看到这道题直接网络流。”其实不用网络流。题目中最关键的一句话其实是注意:输入数据不保证gcd(a,b)=1\gcd(a,b)=1gcd(a,b)=1。真是一语点醒梦中人。事实上,我们需要充分利用aaa,bbb是整数的条件。两条直线aix+biy+ci=0a_ix+b_iy+c_i=0aix+biy+ci=0与ajx+bjy+cj=0a_jx+b_jy+c_j=0ajx+bj原创 2021-11-01 08:44:39 · 232 阅读 · 0 评论 -
洛谷P7917 【洛谷月赛LGR-096 Div.2 T1】 [Kubic] Addition题解
这道题真是让我深刻地陷入了对我智商的怀疑。。。比赛想了50min,结果最后评出来难度是过分了啊。。。题目大意解题思路贪心。可以看出,每个数aia_iai对答案的贡献是±ai\pm a_i±ai。那么我们尽量让每个数的贡献为其绝对值。又注意到a1a_1a1的贡献永远是a1a_1a1本身(因为没有哪个数能减它)。那么,最优解就是a1+∑i=2n∣ai∣a_1+\sum \limits_{i=2}^n|a_i|a1+i=2∑n∣ai∣。下面证明最优解一定可以构造出来。考虑从右往左合并原创 2021-11-01 08:05:54 · 394 阅读 · 0 评论 -
Tarjan求割点和Tarjan求SCC代码对比
求SCC:void Tarjan(int u){ low[u] = dfn[u] = ++tot; stk.push(u); for(int e = first[u]; e; e = nxt[e]) { int v = go[e]; if(!dfn[v]) { Tarjan(v); low[u] = min(low[u], low[v]); }原创 2021-08-27 09:20:10 · 181 阅读 · 0 评论 -
浅谈单调队列的性质
性质1:单调性队列中的元素必须满足单调性。如果要求区间最大值,则队列单调递减;否则队列单调递增。即:队首就是要求的元素。性质2:有序性事实上,元素在原序列中的相对位置和在队列中的相对位置不变。代码一个递增(求最小值)的单调队列:int head = 1, tail = 0;for(int i = 1; i <= n; ++i){ while(tail >= head && q[tail] >= a[i]) --tail; q[原创 2021-09-23 10:44:23 · 357 阅读 · 0 评论 -
BFS、SPFA、Dijkstra算法中vis数组的用法对比
先上代码:BFS:Dijkstra:struct node{ int u, ds; friend bool operator<(const node& n1, const node& n2) { return n1.ds > n2.ds; }};bool vis[MAXN];int dis[MAXN];void Dijkstra(int s){ memset(dis, 0x3f, sizeo原创 2021-09-15 19:54:50 · 1703 阅读 · 0 评论 -
Tarjan算法超超超详解(ACM/OI)(强连通分量/缩点)(图论)(C++)
深入浅出的Tarjan算法手把手讲解!看完就会!原创 2021-08-24 15:20:52 · 13076 阅读 · 20 评论 -
C++: 函数返回类对象时是否执行析构函数
#include<iostream>using namespace std;struct A{ A(){} A(const A&) { cout<<"Copy constructor\n"; } ~A() { cout<<"Destructor\n"; }};A f(){ return A();}A g(){ A a; return .原创 2020-11-17 22:46:16 · 1945 阅读 · 14 评论 -
C++ Windows编程:如何强制立即发送一条WM_PAINT消息
RECT rect;GetClientRect(hwnd,&rect);//设置要更新的区域,可以是自己给定的UpdateWindow(hwnd);RedrawWindow(hwnd,&rect,nullptr,RDW_INVALIDATE|RDW_UPDATENOW);原创 2020-10-09 22:36:48 · 954 阅读 · 0 评论 -
OpenSSL踩坑记:找到MinGW自带的OpenSSL
有了MinGW就不用自己编译OpenSSL啦!原创 2020-05-18 09:37:16 · 1935 阅读 · 0 评论 -
Windows上把各种C++库编译为静态库的一般方法
本人灰常讨厌DLL,所以喜欢把C++库编译位静态。这里以wxWidgets为例:有两个选项:wxBUILD_SHARED、wxBUILD_USE_STATIC_RUNTIME比较重要。首先,wxBUILD_SHARED肯定是不能勾选的。其次,wxBUILD_USE_STATIC_RUNTIME意味着链接静态运行时库,必须勾选(有的叫BUILD_MT)。然后生成即可。总结起来,不能生成shared版本,且必须链接静态运行时库(由VC++提供)。不过还有一点,这些库得知道你用的是原创 2020-09-01 11:07:18 · 991 阅读 · 0 评论 -
C++ Windows:程序后面跟一个manifest很恶心,怎么把manifest直接嵌入程序(揉在程序里面)呢?
https://docs.microsoft.com/en-us/cpp/build/how-to-embed-a-manifest-inside-a-c-cpp-application?view=vs-2019原创 2020-09-01 15:46:13 · 1050 阅读 · 1 评论 -
C++网络编程:WinINet踩坑记——怎么只有两个线程在工作,其他都超时了?
今天想用WinInet捏一个多线程下载。遇到两个问题:1.怎么会出现“无法连接到吊销服务器,或未获得最终响应”的问题?2.为什么只有两个线程能拿到数据,其他都超时了?第一个问题很好解决,改注册表,别让他检查吊销服务器了:void disable_certificate_revocation_check_via_registry(std::string&& strval="Software\\Microsoft\\Windows\\CurrentVersion\\Intern原创 2020-08-19 10:11:32 · 424 阅读 · 0 评论 -
C++ boost::asio::ip::tcp::iostream大法:像流一样进行Internet数据传输和接收
堪称黑科技!原创 2020-05-14 10:04:55 · 855 阅读 · 0 评论 -
C++下载文件(最简单办法,没有之一)(只适用于windows)
WinAPI大法好~#include<windows.h>#include<urlmon.h>#pragma comment(lib,"urlmon.lib")int main(){ URLDownloadToFile(NULL,"https://www.baidu.com/img/baidu_jgylogo3.gif","baidu_jgylogo3.gif",0,NULL); //https://docs.microsoft.com/en-us/pr原创 2020-05-12 16:40:38 · 1687 阅读 · 0 评论 -
【转】C/C++变长参数宏(Variadic Macros)
宏也可以有省略号(...)!转载 2020-05-07 13:18:38 · 638 阅读 · 0 评论 -
C++输入输出:iostream还是cstdio?
<iostream>快还是<cstdio>快?切不可人云亦云,误了OI大事!cout和printf,cin和scanf,究竟谁快?赶快来看一看吧~^_^原创 2020-04-26 09:34:43 · 6082 阅读 · 9 评论