自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

CoAAColA的博客

我从细小的源泉里饮水,而我的渴大于一座海

  • 博客(62)
  • 收藏
  • 关注

原创 详解中缀表达式转化为后缀表达式并求值,附代码解释

思路首先我们需要知道如何转化表达式并求值:首先不同的运算符有不同的优先级:对于(,),优先级最高,其次是*,/,最低是+,-。在从左往右扫描字符串时,遇到数字,就将其直接压入数组中。遇到操作符时,如果当前栈为空,那么直接压入栈中,如果栈不为空,那么将栈顶操作符优先级大于等于当前操作符的操作符pop出栈,并压入数组,直到栈顶操作符优先级小于当前操作符或栈为空才停止此次操作,并将当前操作符压入栈中。由于在我的代码中遇到左括号是直接递归,右括号return,因此上面的处理中不需要考虑括号。得到表达式后,我们

2021-03-10 15:27:44 578

原创 C++ Primer第五版练习 14.42

练习 14.42: 使用标准库函数对象及适配器定义一条表达式,令其:(a) 统计大于1024的值有多少个。#include <iostream>#include <vector>#include <functional>#include <algorithm>using namespace std;using std::placeholders::_1;int main() { vector<int> vec{ 1,

2021-01-25 17:26:38 221

原创 STL源码剖析5.8节hash_set 结尾处示意图疑似错误

hash_set<int> Set;Set.insert(3);Set.insert(196);Set.insert(1);Set.insert(389);Set.insert(194);Set.insert(387);hash_set<int>::iterator ite1 = Set.begin();hash_set<int>::iterator ite2 = Set.end();for(; ite1 != ite2; ++ite1) cout &

2020-12-04 21:32:17 170

原创 C++ Primer第五版练习 16.39

练习 16.39:对16.1.1节中的原始版本的compare函数,使用一个显式模板实参,使得可以向函数传递两个字符串字面常量。思路:因为原函数中只有一个模板类型参数,如果是数组的引用的话会要求两个字符串字面常量的长度相等,同时函数形参是引用类型,不可以对数组的实参应用正常的指针转换,因此必须转换类型。由此我们想到显式指定模板实参为指针类型,即可达到要求。代码:template<typename T>int cmp(const T &v1, const T &v2) {

2020-11-17 21:30:15 129

原创 简单实现c++中的shared_ptr及unique_ptr

练习 16.28:编写你自己版本的shared_ptr和unique_ptr.思路:由现在在书中学到的内容,实现一个智能指针使用引用计数的方式来实现。同时并没有实现weak_ptr,因此实现智能指针是比较简单的。我在实现过程中一部分参考了std的写法,比起我之前的写法简洁了不少,但有一些特性因为不清楚std怎么实现的,不过为了追求与std的一致性,还是实现了,这一部分代码会很不自然。同时在shared_ptr实现中使用了copy and swap技术,不仅代码变得简洁了许多,同时也顺带解决了一些问题。

2020-11-16 12:39:10 280

原创 C++ Primer第五版练习 16.19、16.20

练习 16.19:编写函数,接受一个容器的引用,打印容器中的元素。使用容器的size_type和size成员来控制打印元素的循环。代码:template <typename T>void my_print(const T &cont) { /*for (typename T::size_type i = 0; i < cont.size(); ++i) { //该版本要求容器的迭代器为随机访问迭代器 cout << cont[i] << endl

2020-11-14 11:01:13 104

原创 C++ Primer第五版练习 16.16

**练习 16.16:**将StrVec类重写为模板,命名为Vec。代码:#include <algorithm>#include <string>#include <stdexcept>template <typename T> class Vec{ friend bool operator==(const Vec<T> &lhs, const Vec<T> &rhs) { if (lhs.size(

2020-11-13 22:19:07 133

原创 C++ Primer第五版练习 16.4、16.5、16.6、16.7

代码:template<typename Iter, typename ValueType>Iter my_find(const Iter &begin, const Iter &end, const ValueType &val) { for (Iter bgn = begin; bgn != end; ++bgn) { if (*bgn == val) return bgn; } return end;}template<typename T

2020-10-19 20:40:39 187

原创 使用cmake-gui生成cocos2d-x-4.0的工程文件常见的一个问题

在选择对应的平台时如果选择x64,会有一些不会解释的错误,此时改成Win32就好了。改成就可以解决问题了 如果是这个问题的话

2020-09-30 15:32:48 214

原创 C++Primer第五版练习14.38、14.39

练习 14.38:编写一个类令其检查某个给定的string对象的长度是否与一个阈值相等。使用该对象编写程序,统计并报告在输入的文件中长度为1的单词有多少个、长度为2的单词有多少个、······长度为10的单词又有多少个。代码:class CheckLength {public: CheckLength(string::size_type _len) : len(_len) { } bool operator()(const string &lhs) { return lhs.len

2020-09-22 21:09:45 283

原创 C++Primer第五版练习14.35、14.36、14.37

练习 14.35:编写一个类似于PrintString的类,令其从istream中读取一行输入,然后返回一个表示我们所读内容的string。如果读取失败,返回空string。练习 14.36:使用前一个练习定义的类读取标准输入,将每一行保存为vector的一个元素。练习 14.37:编写一个类令其检查两个值是否相等。使用该对象及标准库算法编写程序,令其替换某个序列中具有给定值的所有实例。代码:class PrintString {public: PrintString(ostream &amp

2020-09-22 15:28:25 179

原创 C++Primer第五版练习题13.40

练习 13.40:为你的StrVec类添加一个构造函数,它接受一个initializer_list<string>参数StrVec::StrVec(const std::initializer_list<std::string> &il) { auto newdata = alloc_n_copy(il.begin(), il.end()); elements = newdata.first; first_free = cap = newdata.second;}

2020-09-17 13:13:18 196

原创 C++Primer第五版练习13.39

练习 13.39:编写你自己版本的StrVec,包括自己版本的reserve,capacity和resize。allocate_and_construct(std::size_t):void StrVec::allocate_and_construct(std::size_t newcapacity) { auto newdata = alloc.allocate(newcapacity); auto dest = newdata; auto elem = elements; for (std

2020-09-17 13:08:10 192

原创 C++ Primer第五版练习题11.35

练习11.35: 在buildMap中,如果进行如下改写,会有什么效果? trans_map[key] = value.substr(1);改为trans_map.insert({ key, value.substr(1) });这题主要是考察map的下标操作与insert成员函数的区别:对于下标运算符, 有两种情况:关键字已存在,那么会将关键字对应的元素的关联值替换为新值关键字不存在,那么会将一个新的元素插入到map中,关键字即为下标运算符接受的索引,值进行值初始化。最后提取出新插入的元

2020-08-25 17:27:44 206

原创 C++ Primer第五版练习题11.16

练习 11.16:使用一个map迭代器编写一个表达式,将一个值赋予一个元素。我们可以使用map的find函数:int main(int argc, char *argv[]){ map<string, int> mp; string s; int num; while (cin >> s >> num) { auto iter = mp.find(s); if (iter == mp.end()) { mp.insert({s, num});

2020-08-24 10:28:51 179

原创 C++ Primer第五版练习题10.37

**练习 10.37:**给定一个包含10个元素的vector,将位置3到7之间的元素按逆序拷贝到一个list中。第一眼看到这题时,竟然还想了一会怎么获得特定位置的迭代器。。由于我们可以用一个迭代器范围来初始化一个容器,只需满足范围中元素的类型与被初始化容器的元素类型相容即可,因此,我们可以获得对应位置的迭代器并转换成反向迭代器即可:int main(int argc, char *argv[]) { vector<int> vec; for (int i = 0; i < 1

2020-08-22 21:45:50 201

原创 C++适配器重载默认容器类型

C++适配器重载默认容器类型最近在看Prime C++,书中第329页中提到在创建一个适配器时将一个命名的顺序容器作为第二个类型参数,来重载默认容器类型。起初看到这句话时,还不是很能理解这个重载默认容器类型是什么意思,再看了一遍书才明白:三种适配器都有自己的默认容器类型,可以理解为是基于什么实现的,比如:默认情况下,stack和queue是基于deque实现的,priority_queue是基于vector实现的。但在不同的情况下,不同的容器类型有各自的优势,因此,我们有时可能需要将适配器的容器类型重

2020-08-16 22:01:07 124

原创 c++primer第五版练习题3.19

练习3.19:如果想定义一个含有10个元素的vector对象,所有元素的值都是42,请列举出三种不同的实现方法。哪种方法更好呢?为什么?vector<int> v1(10, 42);vector<int> v2{ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, };vector<int> v3 = { 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, };vector<int> v4(.

2020-07-18 22:58:41 208

原创 Codeforces Global Round 8 A~D

E题不会了,提前写一下博客。(不保证一定正确,A. C+=题意:给你两个数a, b,你可以执行操作:a += b 或者 b += a。问最少执行多少次操作之后,a,b中的至少一个数大于给定的n。思路:每一次操作改变a,b中的小值即可,因为a+b对两者是一样的。代码:#include <iostream> using namespace std; int main(){ ios::sync_with_stdio(false); cin.tie(0), cout.

2020-06-19 01:24:04 256

原创 python中的jieba分词保留给定词汇

之前在做python的词云作业时,希望保留一些特定的词汇,但在网上没有找到方法,今天在上python课的时候老师给出了解答:首先,调用jieba.load_userdict(文件名),加载需要保留的词汇,文件内容是需要保留的词汇,然后使用jieba.lcut(text)即可对给定的文本进行分析,即可得到结果。代码:def cut_by_custom_dict(text=None): jieba.load_userdict('../data/user_dict.txt') ret

2020-06-11 15:05:13 3071

原创 Codeforces Round #648 (Div. 2)

A. Matrix Game题意:两个人在一个n*m的01矩阵上玩游戏,一个人每轮选择一个位置(y,x)将其置为一,要求是y行无1,x列无1。当一个人无法选择符合条件的点时,他失败。思路:统计有多少个空行以及空列,符合条件的点的数目为其中的小值,当这个值为奇数时先手胜,否则后手胜。代码:#include <iostream>using namespace std;const int N = 55;int a[N][N], r[N], c[N];int main(

2020-06-08 11:27:52 194

原创 c++中重载+=运算符值不改变的问题

背景:今天在使用pair<int,int>时,想重载它的+=运算符,写成了如下形式:pair<int,int> operator += (pair<int,int> a, pair<int,int> b){ return make_pair(a.first+b.first,a.second+b.second);}结果发现在进行+=操作后,+=的左值并没有发生改变,转念一想,使用操作符实际上可以理解为一次函数的调用,因此,我想得到的值作为

2020-06-04 22:18:44 455

原创 字符串经过多次转义后得到反斜杠

背景:最近遇到了需要处理字符串的问题,在我的项目里需要先对字符串进行读取,然后对字符串进行处理后得到结果,因此这之中进行了两次字符的转义,比如"\\\\"在最后得到的是"\"。因此,要想得到"\n是转义字符",只需要在字面常量中用"\\\\n是转义字符"表示即可。在这两次转义中,第一次转义是机器自动执行的,比如我们在代码中输入"\\n"会得到"\n",在第二次转义时一般会是由代码执行的,比如当前读取到的字符是'\\',这是我们可以将指针后移一位,如果是'n','t'或者其他的可以如此拼接得来的转义字符,我们

2020-06-03 21:29:06 1202

原创 Educational Codeforces Round 87 (Rated for Div. 2) D. Multiset

题意:给定一个含有n个数的数组,每个数的范围都在[1,n]之间,有k个操作,操作有两种,一种是将数组中第k小的数删除,一种向数组中插入一个[1,n]之间的数,在所有操作完成后,如果数组中还有数,那么任意输出一个,否则输出0。思路:该题乍一看就和一个普通的权值线段树没什么区别,但它给的内存空间比较小,因此线段树区间信息只能作为函数参数传递,而不能写一个结构体来储存区间信息。代码:#include <iostream>#include <windows.h>using

2020-05-22 23:56:19 274

原创 Multiplication Puzzle POJ - 1651 区间dp

题目链接题意:给定一个长度区间为的数组,你可以对除数组首元素以及尾元素以外的元素进行下述操作:选定一个元素ai,然后删除ai,得到的值为ai-1*ai*ai+1,重复进行该操作,直到数组中只剩下两个元素。问得到值的总和最小是多少。思路:区间dp模板题,用MIN[L][R]代表区间[L,R]只剩两个数时得到的最小值,枚举断点求最小值即可,最后输出MIN[0][n-1]。代码:#in...

2020-04-07 16:33:05 116

原创 Codeforces Round #626 B. Count Subrectangles

B. Count Subrectangles题意:给定两个一维数组,数组中的每个元素非0即1,给你一个值k,问你在两数组相乘后的二维数组中有多少个面积为k的只包含1元素的矩阵。思路:由于这个乘法的特殊性,我们可以知道最后的二维数组中的1元素是以矩阵的方式聚集的,一数组的连续1全1矩阵的长,另一数组的连续1为全1矩阵的宽,因此,我们可以用两个数组分别储存对应原数组的连续一长度,排序后求前缀...

2020-03-08 21:23:42 203

原创 Gym - 101848C 树链剖分 + 线段树 + 动态开点

学习自 :大佬博客题意: 给一棵树,每一个节点上有多个权值,q次询问,求对于某一个节点,从其自身到根节点的路径上第一个含有给定权值的点的编号;思路:对每一个权值建立一颗线段树,然后用线段树维护区间最大值即可求解.#include <iostream>using namespace std;const int N = 1e5 + 10, MAXN = 3e7 + ...

2019-12-04 09:06:36 159

原创 Codeforces Round #602 (Div. 2) D2.Optimal Subsequences (Hard Version)

D2.Optimal Subsequences (Hard Version)题意:给一个长度为n的序列,m次询问,问你原序列的总和最大且字典序最小的长度为k的子序列的第pos位元素是多少。思路:对询问按照长度排序,在原序列上建立一个线段树,线段树保存区间的最大值MAX,最大值的位置pos,区间中多少元素已被加入新序列中sum。当新序列的长度小于当前询问的长度时,将序列中的最大值置为0,该位...

2019-11-27 19:52:28 163

原创 Codeforces Round #601 (Div. 2)

A:Changing Volume题意:你可以对一个数进行(−5,−2,−1,+1,+2,+5)六种操作任意次数,但在操作过程中给定的数不能变为负数,求最少操作几次可以将a变成b。思路:简单讨论即可。代码:#include <iostream> using namespace std; int main(){ ios::sync_with_stdio(fa...

2019-11-20 12:53:45 189

原创 Codeforces Round #600 (Div. 2)

A:Single Push题意:给你两个长度都为n的数组a[]和b[],问在经过一个对a数组一段连续区间内的元素都加一个正整数的操作后,a[]能否与b[]等价。思路:判断是否最多只有一段这样的连续区间,代码写得有点乱,补题的时候可以看看大佬们的代码。代码:#include <iostream> using namespace std; const int ...

2019-11-17 08:25:37 145

原创 hdu - 4825 Xor Sum 01字典树

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4825题意:对于每一个测试样例,给你n个数,然后m个询问,每个询问给你一个数x,要求你给出n个数中哪个数与x的异或和最大。思路:考虑在二进制下对每一位进行贪心,从高位到低位,在最暴力的做法下,设有一个集合内包含了给定的n个数,从x的最高位开始,如果该位为1,则将集合中对应位为0的数删去,如果删完...

2019-09-03 21:36:11 195

原创 Codeforces Round #581 (Div. 2)

比赛链接:http://codeforces.com/contest/1204A. BowWow and the Timetable题意:给你一个二进制数,求有多少个4的幂次方小于这个数。思路:由于2^2=4,因此可以通过二进制的位数来判断答案。详情见代码。代码:#include <iostream>#include <string> using...

2019-08-21 11:33:38 325

原创 hdu - 6681 Rikka with Cake 线段树

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6681题意:给定一个左下顶点为,右上顶点为的矩形,然后给你k条射线,每条射线的起点及方向(上下左右)都已知,射线的起点都位于矩形内,不包括矩形边界,且每条射线间不会有重叠,求矩形被分割成多少块。思路:由于是射线,因此容易知道每一次射线的相交都会使答案+1,考虑用线段树求解。按照起始点的x坐标对射...

2019-08-20 10:26:57 466 1

原创 Educational Codeforces Round 70 B. You Are Given a Decimal String...

题目链接:http://codeforces.com/contest/1202/problem/B题意:有一个由[0,9]的整数组成的序列,然后你有两种[0,9]的整数,对于序列S,要求你通过加上给定的两种整数中的一种并对10取余使得S0到S1,最后到Sn,求出这个步骤最少多少次。这只是题目的一个子问题,题目是给你一个序列,对于每一对(其中i,j都属于上文给定的范围),输出对应的次数,如果无法...

2019-08-09 15:22:06 311

原创 hdu - 3496 Watch The Movie

题目链接:https://vjudge.net/problem/HDU-3496题意:有N部电影,每部电影有对应的时长以及看完所能得到的价值,现在你有L时间,最多看M部电影,问你能得到的价值最大是多少思路:二维费用01背包,但是要注意选择的M部电影必须看完,否则价值为0;代码:#include <iostream>#include <cstring>...

2019-07-30 17:19:29 154

原创 poj - 1976 A Mini Locomotive

题目链接:https://vjudge.net/problem/POJ-1976题意:有n节车厢,每节车厢有ai个人,你有三辆车,每辆车可以接连续m节车厢的人,问你可以接的最大人数是多少。思路:动态规划,用dp[i][j]表示第i辆车在第j节车厢开始接人所能接的最大人数,状态转移方程为dp[i][j] = max(dp[i-1][x]) + pre[j+m-1]-pre[i-1], x...

2019-07-30 14:41:16 215

原创 UVALive - 5066 Fire Drill

题目链接:https://cn.vjudge.net/problem/UVALive-5066#author=0题意:有一L层,每层为一个H*W矩阵的楼,矩阵中有五种元素:X,.,U,D,S,分别代表障碍物,空地,向上楼梯,向下楼梯,起始点,现在有N个人的坐标信息及其救援价值(人都位于空地上),S秒的救援时间,移动一格花费一秒,带着人移动一个花费两秒,一次只能救一个人。问:在给定时间内能达到的...

2019-07-27 09:24:21 138

原创 poj - 2661 Help Jimmy 动态规划

题目链接:http://poj.org/problem?id=1661题意:中文题思路:dp,但是有很多细节需要考虑,因此WA了很多发,具体看代码注释。#include <iostream>#include <cstring>#include <algorithm>using namespace std;struct ban{...

2019-07-26 10:34:34 128

原创 hdu - 1069 DP

题目链接:https://cn.vjudge.net/problem/HDU-1069题意:有n种砖,每种砖有长宽高三个属性,每种砖有无限个,且砖可以旋转(即每种砖的长宽高可以相互对调),按照上面的砖的长与宽严格小于下面的砖的长与宽的放置方法,求最大的砖块累加高度。思路:将每种砖(a,b,c)分解为六种砖(a,b,c),(b,a,c),(c,b,a),(c,a,b),(a,c,b),(b,...

2019-07-24 08:59:13 205

原创 关于java中控件的默认字体

之前在做java课设时想将某一个控件设置为某一种字体后再想回到默认字体,结果一直都找不到哪个是默认字体,后来才想到用对应控件的getFont()方法得到它的字体然后直接输出即可,如下图所示:可知,默认字体为"Dialog",默认风格为Font.BOLD,大小为12,但是不太清楚family是什么。...

2019-07-19 19:05:38 1514

空空如也

空空如也

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

TA关注的人

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