c++
Nicolas Lee
Yesterday you said tomorrow
展开
-
vector中resize( )和reserve( )的区别
两个函数的定义reserve 函数语法: void reserve( size_type size ); reserve()函数为当前vector预留至少共容纳size个元素的空间.(译注:实际空间可能大于size)resize 函数语法: void resize( size_type size, TYPE val ); ...原创 2018-12-31 09:03:04 · 302 阅读 · 0 评论 -
vector <bool>比 vector<int>慢的原因和替代方法
原文链接https://blog.csdn.net/u013249689/article/details/25297657vector<bool>不是容器,至少,不是标准意义上的容器。vector<bool>的名称有点让人误解,因为其内部元素实际上并不是标准的bool值,标准的bool值至少与char拥有一样的大小,从而可以被“正常”使用。然而C++标准对于vect...转载 2019-01-22 23:02:14 · 1313 阅读 · 1 评论 -
atan(y/x)与atan2(y,x)的区别
C/C++标准库中计算正切的函数有两个,一个是atan(y/x),一个是atan2(y, x)。atan2(y, x)是4象限反正切,它的取值不仅取决于正切值y/x,还取决于点 (x, y) 落入哪个象限:当点(x, y) 落入第一象限时,atan2(y, x)的范围是 0 ~ pi/2; 当点(x, y) 落入第二象限时,atan2(y, x)的范围是 pi/2 ~ pi; 当点(x...转载 2019-01-28 19:28:19 · 660 阅读 · 0 评论 -
为何程序员喜欢将INF设置为0x3f3f3f3f?
在算法竞赛中,我们常常需要用到一个“无穷大”的值,对于我来说,大多数时间我会根据具体问题取一个99999999之类的数(显得很不专业啊!)在网上看别人代码的时候,经常会看到他们把INF设为0x7fffffff,奇怪为什么设一个这么奇怪的十六进制数,一查才知道,因为这是32-bit int的最大值。如果这个无穷大只用于一般的比较(比如求最小值时min变量的初值),那么0x7fffffff确实是一...转载 2019-02-03 20:22:25 · 256 阅读 · 0 评论 -
算法训练 C++ CH08 01
题目链接问题描述 已知一个有理数类Zrf_Ratio,实现如下的操作符重载形式: friend std::ostream& operator<<(std::ostream&, const zrf_Ratio&);//输出最简分数 friend std::istream& operator>>(std::istream&...原创 2019-02-07 15:02:36 · 449 阅读 · 0 评论 -
C++中的比较函数
c++中提供了比较函数less<type>() //从小到大排序 <grater<type>() //从大到小排序 >less_equal<type>() // <=gtater_equal<type>()// >=//这四种函数set集合默认排序方式 从小到大即less的,我们可以通过创建se...转载 2019-02-08 11:14:55 · 5796 阅读 · 0 评论 -
Defense Lines UVA - 1471 防线
题目:https://vjudge.net/problem/UVA-1471#author=0题意:给定一个序列,要求删去一个连续子序列后,得到的序列有一个最长的连续递增序列,输出最长连续递增序列长度【分析】为了方便叙述,下面用L序列表示“连续递增子序列”。删除一个子序列之后,得到的最长L序列应该是由两个序列拼起来的,如图8-15所示。最容易想到的算法是枚举j和i(前提是A[j]&...原创 2019-01-30 17:20:50 · 239 阅读 · 0 评论 -
算法提高 洗牌
题目链接问题描述 小弱T在闲暇的时候会和室友打扑克,输的人就要负责洗牌。虽然小弱T不怎么会洗牌,但是他却总是输。 渐渐地小弱T发现了一个规律:只要自己洗牌,自己就一定会输。所以小弱T认为自己洗牌不够均匀,就独创了一种小弱洗牌法。 小弱洗牌法是这样做的:先用传统洗牌法将52张扑克牌(1到K各四张,除去大小王)打乱,放成一堆,然后每次从牌堆顶层拿一张牌。如果这张牌的大小是P(1到...原创 2019-02-11 20:04:08 · 741 阅读 · 0 评论 -
算法提高 统计单词数
题目链接问题描述 统计输入英文文章段落中不同单词(单词有大小写之分, 但统计时忽略大小写)各自出现的次数。 输入段落中所含单词的总数不超过100,最长单词的长度不超过20个字母.#include <iostream>#include <map>#include <algorithm>using namespace std;strin...原创 2019-01-26 21:07:48 · 414 阅读 · 0 评论 -
算法提高 c++_ch04_02_修正版
题目链接 实现一个时间类Time。将小时,分钟和秒存储为int型成员变量。要求该类中包含一个构造函数,访问用的函数,一个推进当前时间的函数adv(),一个重新设置当前时间(即将当前时间设为00:00:00)的函数reset()和输出结果函数print()。注意时间按数字式电子表格式显示,即小时、分、秒分别用两位表示,如果其中之一小于10,则前方补0,如22:01:00(中间不含空格),另外按...原创 2019-02-12 11:37:45 · 255 阅读 · 0 评论 -
算法提高 P1003
题目链接作为一名网络警察,你的任务是监视电子邮件,看其中是否有一些敏感的关键词。不过,有些狡猾的犯罪嫌疑人会改变某些单词的字母顺序,以逃避检查。请编写一个程序,发现这种调整过顺序的关键词。程序的输入有两行,第一行是关键词列表,第二行是待检查的句子。程序的输出为在该句子中所找到的经过顺序调整的关键词。(单词全部为小写,单词之间以一个空格分隔,每一行的单词个数不限)输入: guns mine...原创 2019-02-22 22:13:08 · 452 阅读 · 0 评论 -
算法训练 拦截导弹
题目链接锦囊2求一套系统拦截的导弹最大值为最长不下降子序列问题,用动态规划。 求最少多少套系统需要使用贪心法,每枚后面的炮弹使用能拦截它的最低的系统。问题描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,...原创 2019-02-23 23:05:15 · 2049 阅读 · 0 评论 -
Molar mass UVA - 1586 分子量
题目链接给出一种物质的分子式(不带括号),求分子量。本题中的分子式只包含4种原子,分别为C, H, O, N,原子量分别为12.01, 1.008, 16.00, 14.01(单位:g/mol)。例如,C6H5OH的分子量为94.108g/mol。分析:用sscanf提取已知位置的数字。#include <cstdio>#include <cstring&g...原创 2019-03-06 11:26:55 · 196 阅读 · 0 评论 -
Periodic Strings UVA - 455 周期串
题目链接如果一个字符串可以由某个长度为k的字符串重复多次得到,则称该串以k为周期。例如,abcabcabcabc以3为周期(注意,它也以6和12为周期)。输入一个长度不超过80的字符串,输出其最小周期。#include <iostream>#include <string>using namespace std; int main(){ int...原创 2019-03-06 15:34:09 · 192 阅读 · 0 评论 -
The SetStack Computer UVA - 12096 集合栈计算机 set集合
题目链接有一个专门为了集合运算而设计的“集合栈”计算机。该机器有一个初始为空的栈,并且支持以下操作。PUSH:空集“{}”入栈。 DUP:把当前栈顶元素复制一份后再入栈。 UNION:出栈两个集合,然后把二者的并集入栈。 INTERSECT:出栈两个集合,然后把二者的交集入栈。 ADD:出栈两个集合,然后把先出栈的集合加入到后出栈的集合中,把结果入栈。每次操作后,输出栈顶集合...原创 2019-03-13 22:30:59 · 247 阅读 · 0 评论 -
fill和memset的区别
fill函数的作用是:按照单元赋值,将一个区间的元素都赋予val值。函数参数:fill(vec.begin(), vec.end(), val); val为将要替换的值。#include <algorithm>fill(vec.begin(), vec.end(), val); //原来容器中每个元素被重置为valmemset函数的作用是:按照字节填充某字符#inc...原创 2019-01-27 19:58:38 · 3613 阅读 · 2 评论 -
C++ string的大小写转换
将全部的string转换为一致的大写和小写STL的algorithm库给我们提供了这样的便利,使用模板函数transform可以轻松解决这个问题,开发人员只需要提供一个函数对象,例如将char转成大写的toupper函数或者小写的函数tolower函数。transform原型:template < class InputIterator, class OutputIterat...转载 2019-01-26 21:18:08 · 7380 阅读 · 2 评论 -
ALGO-140 算法训练 P1101
算法训练 P1101 时间限制:1.0s 内存限制:256.0MB 有一份提货单,其数据项目有:商品名(MC)、单价(DJ)、数量(SL)。定义一个结构体prut,其成员是上面的三项数据。在主函数中定义一个prut类型的结构体数组,输入每个元素的值,计算并输出提货单的总金额。 输入格式:第一行是数据项个数N(N<100),接下来每一行是一个数据项。商品...原创 2018-12-31 11:21:39 · 301 阅读 · 0 评论 -
ALGO-10 算法训练 集合运算
算法训练 集合运算 时间限制:1.0s 内存限制:512.0MB 锦囊1排序后处理。问题描述 给出两个整数集合A、B,求出他们的交集、并集以及B在A中的余集。输入格式 第一行为一个整数n,表示集合A中的元素个数。 第二行有n个互不相同的用空格隔开的整数,表示集合A中的元素。 第三行为一个整数m,表示集合B中的元素个数。 第四行有m...原创 2019-01-04 23:44:17 · 878 阅读 · 0 评论 -
带宽(Bandwidth, UVa 140)
给出一个n(n≤8)个结点的图G和一个结点的排列,定义结点i的带宽b(i)为i和相邻结点在排列中的最远距离,而所有b(i)的最大值就是整个图的带宽。给定图G,求出让带宽最小的结点排列,如图7-7所示。 下面两个排列的带宽分别为6和5。具体来说,图7-8(a)中各个结点的带宽分别为6, 6,1, 4, 1, 1, 6, 6,图7-8(b)中各个结点的带宽分别为5, 3, 1, ...原创 2019-01-11 12:41:59 · 863 阅读 · 0 评论 -
Tree UVA - 548 树的遍历--已知先序中序求权值。
Tree You are to determine the value of the leaf node in a given binary tree that is the terminal node of a path of least value from the root of the binary tree to any leaf. The value of a path is t...原创 2019-01-01 17:47:07 · 308 阅读 · 1 评论 -
System Dependencies UVA - 506 模拟
软件组件之间可能会有依赖关系,例如,TELNET和FTP都依赖于TCP/IP。你的任务是模拟安装和卸载软件组件的过程。首先是一些DEPEND指令,说明软件之间的依赖关系(保证不存在循环依赖),然后是一些INSTALL、REMOVE和LIST指令,如表6-1所示。表6-1 指令说明指令说明 DEPEND item1 item2 [item3 …] item1依赖组件item2, it...原创 2019-01-08 09:16:23 · 261 阅读 · 0 评论 -
Parentheses Balance UVA - 673 栈stack
平衡的括号(Parentheses Balance, UVa 673)输入一个包含“( )”和“[ ]”的括号序列,判断是否合法。具体规则如下:空串合法。如果A和B都合法,则AB合法。如果A合法则(A)和[A]都合法。#include <iostream>#include <stack>#include <map> using namespa...原创 2019-01-08 10:12:38 · 194 阅读 · 0 评论 -
算法提高 填充蛋糕
题目:http://lx.lanqiao.cn/problem.page?gpid=T186此题存在PI精度的问题,cmath中有π的定义为M_PI可以直接用。自己写了一个4位小数的π,结果精度不够。#include <cstdio>#include <cmath>int main(int argc, char** argv) { double r; sc...原创 2019-01-23 21:50:13 · 237 阅读 · 0 评论 -
算法训练 回文数 进制加法
算法训练 回文数 时间限制:1.0s 内存限制:256.0MB 锦囊1模拟。问题描述 若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数。 例如:给定一个10进制数56,将56加65(即把56从右向左读),得到121是一个回文数。 又如:对于10进制数87: STEP1:87+78 = 165 STEP2:165+5...原创 2019-01-14 22:30:15 · 950 阅读 · 0 评论 -
error: stray '\241' in program的解决办法
stray '\241' in program :该错误是指源程序中有非法字符,把复制过来的代码在手动的敲打一遍就行了。中文空格、中文引号、中文各种标点符号都会引起这个问题。解决方法:1.把出错行的空格及其前后空格删掉重新打一下试试。2.把明显和其他标点符号颜色不同的改掉。(大部分编译器都有颜色识别)3.直接全部重打。...转载 2019-01-25 12:27:16 · 7053 阅读 · 1 评论 -
算法提高 c++_ch06_02
题目链接注意:打印输出时a数组的长度为max(m,n1+m1),Add时有可能改变数组长度。#include <cassert>#include <iostream>using namespace std;void Disp(int a[], int n){ for(int i=0; i<n-1; i++) cout << a[i] ...原创 2019-01-25 12:31:38 · 311 阅读 · 0 评论 -
max_element()和 min_element() 的使用
min_element()和max_element()用法差不多,直接上max_element()。头文件<algorithm>std::max_elementdefault (1) template <class ForwardIterator> ForwardIterator max_element (ForwardIterator first, F...原创 2019-01-25 21:23:23 · 583 阅读 · 0 评论 -
C++中endl、“\n”和‘\n’有什么区别?
"\n" 表示一个字符串,只有一个数据是回车符'\n' 表示一个字符这两个在输出上是一样的!关于endl:1. 在c++中,终端输出换行时,用cout<<......<<endl 与 “\n”都可以,这是初级的认识。但二者有小小的区别,用endl时会刷新缓冲区,使得栈中的东西刷新一次,但用“\n”不会刷新,它只会换行,盏内数据没有变化。但一般情况,二者的这点区别是很...原创 2019-01-25 21:46:36 · 607 阅读 · 0 评论 -
算法提高 3-2求存款 float运算
题目:http://lx.lanqiao.cn/problem.page?gpid=T386注意:C语言中规定,float 与float相互运算时,为避免丢失精度,结果类型提升为double类型。所以计算中需要强制类型转换,避免计算时成为double。#include <cstdio>int main () { float a, b; scanf("%f%f",&am...原创 2019-01-25 22:02:34 · 259 阅读 · 0 评论 -
priority_queue优先队列的使用
priority_queue头文件<queue>相关定义优先队列容器与队列一样,只能从队尾插入元素,从队首删除元素。但是它有一个特性,就是队列中最大的元素总是位于队首,所以出队时,并非按照先进先出的原则进行,而是将当前队列中最大的元素出队(即默认大根堆)。这点类似于给队列里的元素进行了由大到小的顺序排序。元素的比较规则默认按元素值由大到小排序,可以重载“<”操作符来重新...原创 2019-01-26 16:56:17 · 292 阅读 · 0 评论 -
第九届蓝桥杯 明码 bitset转为将一个数二进制
汉字的字形存在于字库中,即便在今天,16点阵的字库也仍然使用广泛。16点阵的字库把每个汉字看成是16x16个像素信息。并把这些信息记录在字节中。一个字节可以存储8位信息,用32个字节就可以存一个汉字的字形了。把每个字节转为2进制表示,1表示墨迹,0表示底色。每行2个字节,一共16行,布局是: 第1字节,第2字节 第3字节,第4字节 .... 第31字节, ...原创 2019-03-22 20:14:44 · 173 阅读 · 0 评论