03 2021 档案
摘要:#include <bits/stdc++.h> using namespace std; typedef vector<string>::size_type line_no; shared_ptr<vector<string>> file; map<string, shared_ptr<set<l
阅读全文
摘要:继承关系对基类拷贝控制最直接的影响是基类要定义一个虚析构函数,这样我们才能动态分配继承体系中的对象. 当我们delete一个动态分配的对象的指针时将指向析构函数.如果该指针指向继承体系中的某个类型,则有可能出现指针的静态类型与被删除对象的动态类型不符的情况. 析构函数的虚属性会被继承.只要基类的析构
阅读全文
摘要:拷贝构造函数 \(如果一个构造函数的第一个参数是自身类类型的引用,且任何额外参数都有默认值,则为拷贝构造函数.\) class Foo { public: Foo(); // 默认构造函数 Foo(const Foo &); // 拷贝构造函数 } \(拷贝构造在几种情况下都会被隐式使用,因此不应该
阅读全文
摘要:派生类对象向基类的类型转换 因为派生类对象中含有与基类对应的组成部分, 所以能把派生类对象当成基类对象来使用,我们可以将基类的指针或引用绑定到派生类对象中的基类部分上. Quoto item; // 基类 Bulk_quote bulk; // 派生类 Quote item *p = &item p
阅读全文
摘要:Define static type and dynamic type. static type: Type with which a variable is defined or that an expression yields. Static type is known at compile
阅读全文
摘要:\(allocator类定义在头文件memory中,帮我们将内存分配和对象构造分离开来.\) \(它分配的内存时未构造.\) aallocator<string> alloc; // 定义可分配string的allocator对象 auto const p = alloc.allocate(n);
阅读全文
摘要:shared_ptr类 \(与vector类似,智能指针也是模板.\) shared_ptr<string> p1; shared_pte<list<int>> p2; \(默认初始化的智能指针是一个空指针,与普通指针一样,解引用得到它指向的对象.\) if (p && p->empty()) *p
阅读全文
摘要:\(new分配内存, delete释放new分配的内存.\) new \(在默认情况下,动态内存的对象是默认初始化的,所以内置类型或组合类型的对象的值是未定义的.\) string *ps = new string; // 初始化位空的string int *pi = new int // int的
阅读全文
摘要:右值引用 \(所谓右值引用就是必须绑定到右值的引用.\\符号是\&\&.只能绑定到一个将要销毁的对象.\\因此.我们可以自由地将一个右值引用的资源"移动"到另一个对象.\) \(右值和左值都是表达式的属性.\\一般而言,一个左值表达的是一个对象的身份,而右值表达式表达是一个对象的值.\) \(类似任
阅读全文
摘要:\(一个lambda表达式可以表示一个可调用的代码单元,可以将其理解成一个未命名的内联函数.\) \(一个lambda表达式具有一个返回类型,一个参数列表,一个函数体,与函数不同,它可能定义在函数内部.\) \(形式如下:\) [capture list](prarameter list) -> r
阅读全文
摘要:道路与航线 \(topsort + dijkstra\) \(有负边,但spfa已死.\) \(由题意,图中会有很多块,每个块之间是航路(单向边),块内部是道路(双向边).\\所以我们用拓扑序的顺序对每个块做Djk就可以了.保证了正确性和时间.\) #include <bits/stdc++.h>
阅读全文
摘要:https://ac.nowcoder.com/acm/problem/22594 \(拆点\) \(把每个点拆分成下标和经过的次数然后做一遍dijkstra即可\) \(为了表示拆出的点,dist[]和st[]都要升维,每个点有三个元素:id,cnt,dis\) #include <bits/st
阅读全文
摘要:内联函数 \(将函数定义为宏函数或内联函数都可以节约函数压栈出栈的时间\) \(宏函数的问题:\) #define MAX(a, b) ((a) > (b)) ? (a) : (b) \(宏函数是无脑展开, 在预处理阶段进行,它不具有语法的检测能力. 如:\) MAX(a++, b++) -> ((
阅读全文
摘要:C. 1D Sokoban 思路参考 思路 \(我们去枚举每一个b[i]为k,将其作为向右推箱子走到的最远的下标,那么答案就有左右两部分:\) \(右边:最远动过的箱子到k,那么对于初始位置\ge k且处于特殊位置的箱子要算入答案.f[i]表示从i到n箱子已经在特殊位置的个数.\) \(左边: 对于
阅读全文
摘要:B. Berland Crossword \(直接去枚举四个角落,注意枚举的方法,本题如何写的简洁很关键.\) #include <bits/stdc++.h> using namespace std; #define IO ios::sync_with_stdio(false);cin.tie(0
阅读全文
摘要:滑雪与时间胶囊 \(本题可作为\ Prim堆优化\ 求最小生成树的模板题\) \(由于受高度的限制,所以队列中存的不止要有边权,还得有点的高度,\\如果只存边权,就可能先把高度小的入队,最后发现走不通,又得回到高度大的点\\这个时候统计的ans就不对了.\) #include <bits/stdc+
阅读全文
摘要:公路修建问题 \(二分 + 最小生成树\) 题意 \(每两个点有长边和短边,要求生成最小生成树,并且长边的次数不少于K.\\求满足该条件的边权最大的值的最小值.\) 思路 \(注意此题不关心最终的边权和最小,它只关心能否全连通,所有Kruskal不用排序,\\我们去二分最大的边权,由于只用关心一条边
阅读全文
摘要:https://ac.nowcoder.com/acm/problem/16697 #include <bits/stdc++.h> using namespace std; #define IO ios::sync_with_stdio(false);cin.tie(0); cout.tie(0)
阅读全文
摘要:追债之旅 \(最短路 + dp\) 思路 \(这里用了拆点,即每个点并不只是位置,而是位置+到达的天数\) \(dis[i][j]:表示第i天到达j的最小花费\) \(dist[day][to]=min(dist[day][to],dist[day-1][now]+w[i]+cosy[day])\)
阅读全文

浙公网安备 33010602011771号