C++
开飞机的小毛驴儿
自律者自由
展开
-
C/C++ sort函数的用法
STL里面有个sort函数,可以直接对数组排序,复杂度为n*log2(n)。使用这个函数,需要包含头文件#include这个函数可以传两个参数或三个参数。第一个参数是要排序的区间首地址,第二个参数是区间尾地址的下一地址。也就是说,排序的区间是[a,b)。简单来说,有一个数组int a[100],要对从a[0]到a[99]的元素进行排序,只要写sort(a,a+100)就行了,默认的排序方式是升序。原创 2015-04-13 10:39:52 · 1363 阅读 · 0 评论 -
C++ STL中stack/queue的使用
我不生产自己不熟悉的内容,我只是陌生内容的搬运工!向原作致敬!1、stackstack 模板类的定义在头文件中。stack 模板类需要两个模板参数,一个是元素类型,一个容器类型,但只有元素类型是必要的,在不指定容器类型时,默认的容器类型为deque。定义stack 对象的示例代码如下:stack s1;stack s2;stack 的基本操作有:入栈,如例:s.pu转载 2015-04-21 19:36:16 · 588 阅读 · 0 评论 -
Codeforces Round #159 (Div. 2)
A. Sockets题意如下:已有n个插排,第i个插排上边有ai个插口。有m个设备,公寓里有k个插口,这k个插口既可以用来插插排也可以直接将设备插到上面,问最少用几个插排能将所有的设备插在上边。记录这道题的目的在于学习priority_queue的使用。代码如下:#include #include //使用priority_queue必须包含的头文件using namespace s原创 2015-04-21 16:52:29 · 682 阅读 · 0 评论 -
next_permutation 的使用
重排区间中的元素,使得原序列变成按字典次序的下一个序列。其中的“下一个”的定义可以由用户自己定制。加载头文件:#include函数原型:template bool next_permutation( BidirectionalIterator _First, BidirectionalIterator _Last );templat原创 2015-04-17 11:20:13 · 993 阅读 · 0 评论 -
Codeforces Round #162 (Div. 2)
B. Roadside Trees (Simplified Edition)题目很简单,求吃掉所有坚果最少时间,只要按照题意进行模拟就行。注意理解一句话:Jump to the next tree. In this action the height of Liss doesn't change. More formally, when Liss is at height h原创 2015-04-19 10:52:02 · 514 阅读 · 0 评论 -
Codeforces Round #158 (Div. 2)
B. Ancient Prophesy题意还算好理解,给定一字符串,里边只包含数字和-号,输出里边出现次数最多的日期。注意这里的日期必须是规定的格式dd-mm-yyyy,每个月具体到哪天的时候不应该超过当月总共的天数,如4月就不应该有31号,2月不应该有30号等。学会map的使用。代码如下:#include#include#includeusing namespace std;原创 2015-04-23 14:54:36 · 439 阅读 · 0 评论 -
有关C++ int long最大表示长度问题
int是short int的省略,占内存的2个字节,表示范围:-32768~32767。long是long int的省略,占内存的4个字节,表示范围:-2147483648~2147483647。long long 的字符长度是int型的两倍,现在int型一般为32位,所以long long是64位的,能支持的最大数为2^63 -1。根据处理数据的大小,选择合适的类型,尤其在OJ的时候一定要注意题原创 2015-04-13 10:39:33 · 5926 阅读 · 0 评论 -
string类库中的find和rfind函数
注意find和rfind返回的要查找子串的第一次出现的下标,其中find是从0开始查找,而rfind是从n-1开始查找(假设字符串总长度是n),具体参数编程需要的时候查询即可,一定注意的是返回的是下标而非位置,下标i对应位置i+1.原创 2015-04-13 10:39:38 · 1219 阅读 · 0 评论 -
使用容器出现vector subscript out of range等类似错误
报这个错时会弹出一个窗口,貌似内存溢出,这是什么由于vector存放的数据超出了vector的大小所造成的。解决方法如下:在Vector vector之后,不能直接通过如:vector[0] = "aa"vector[1] = "bb"等进行赋值,这样会导致越界。(下标是修改不是插入,如果要用下标,需要保证初始化时候有足够的元素,一般用push_back())首先使用 tagS原创 2015-04-13 10:39:42 · 24018 阅读 · 0 评论 -
Codeforces Round #297 (Div. 2)
C. Little Girl and Maximum Sum题目不难,访问次数越多的点让其权重越大即可。要累计每个点的访问次数,因为是区间,所以每次输入l,r,区间内的每个点都要增加一次。倘若利用for循环遍历相加,会出现超时Time limit exceeded on test的情况(如下图代码)for (i = 0; i<q; i++) { cin原创 2015-04-13 19:13:18 · 353 阅读 · 0 评论 -
暴力swap导致TLE问题解决办法
B. Pasha and String题目很简单,就是将字符串中从某一位置到另一位置之间的片段逆序,基本思路就是利用swap两两交换。这时候题目会出现问题就是超时Time limit exceeded ,两两交换太过于耗费时间,原因在于中间有交换过去又交换回来相当于没做改变的交换浪费了时间,有没有更好的办法呢?因为颠倒的都是中间的数,所以可以统计片段中每个字母颠倒的次数,若为奇数次则交换;偶数原创 2015-04-13 18:58:04 · 735 阅读 · 0 评论 -
memset的正确使用
参考:http://baike.baidu.com/link?url=bppxO-J2VzgD30C96n4NPHQR48OKGkETBAyjDAeKRIe_jELA5IPJtJLzMGuBX36uCESI4qRcTt-H9megJpNf6Kmemset是C/C++当中的函数,将s所指向的某一块内存中的前n个 字节的内容全部设置为ch指定的ASCII值, 块的大小由第三个参数指定,这个原创 2015-04-13 18:58:57 · 649 阅读 · 0 评论 -
C++中不同变量的初始化规则
当定义没有初始化式的变量(如int i;)时,系统有可能会为我们进行隐式的初始化。至于系统是否帮我们隐式初始化变量,以及为变量赋予一个怎样的初始值,这要取决于该变量的类型以及我们在何处定义的该变量。1】内置类型变量的初始化 内置变量是否自动初始化,取决于该变量定义的位置。 ①在全局范围内的内置类型变量均被编译器自动初始化为0。 #includeusing nam原创 2015-04-13 10:39:45 · 765 阅读 · 0 评论 -
C/C++中“位与”运算讨论奇偶
& 按位与 如果两个相应的二进制位都为1,则该位的结果值为1,否则为0int fun(int n){ return (n&1); //返回1表示奇数,0表示偶数。 }根据位与的运算规则,如果两个相应的二进制位都为1,则改为的结果值为1,否则为0.而n&1,其实关键在于最后一位二进制位,它决定着n是奇数还是偶数。即n与1进行位运算无论n有多少原创 2015-04-13 10:39:49 · 1204 阅读 · 0 评论 -
C++中左移<<和右移>>的使用
在C++中,经常会看到别人有int ans=11 #include2 using namespace std;3 int main()4 {5 int a = 1 4;6 cout endl;7 return 0;8 }原创 2015-04-13 10:40:28 · 44860 阅读 · 1 评论 -
Codeforces Round #157 (Div. 2)
A. Little Elephant and Chess题意是说能否将给定的棋盘转换成相邻颜色不同的棋盘,不能想复杂了,想明白了就很简单,格局就两种情况,WBWBWBWB和BWBWBWBW,只要能转换成这两种任一种就能做调整使得满足要求。回顾 用字符数组存储字符串,用cstring中的字符串处理函数,同时别忘了,假如定义了一个字符数组c[9],若有操作cin>>c,其实就能实现输入字符串的效果原创 2015-04-24 08:49:57 · 540 阅读 · 0 评论 -
Codeforces Round #156 (Div. 2)
B. Code Parsing给定一字符串仅包含字符x和y,进行如下两种操作:1.如果有连续的y和x,则交换y和x。如果同时有多对y,x则交换距离起始位置最近的y和x;2.如果有连续的x和y,则在字符串中删除x和y。如果同时有多对x和y,则删除距离起始位置最近的x和y。算法的运行规则如下:1.如果能进行上述两种操作的至少一种操作,则跳转的第二步;否则停止执行算法并输出当前的字符原创 2015-04-24 20:54:34 · 573 阅读 · 0 评论 -
C++中struct与class的比较
C++的struct和class差别很小,其实class就是从struct发展出来的。struct定义的结构体在C++中也是一个类,结构体可以有class的任何东西。struct内数据默认是public类型的,class内数据默认是private类型的。继续用struct是为了向下兼容,习惯问题,以后发展会只用class的。同时结构中也可以像类class一样定义构造函数。原创 2015-04-17 11:06:47 · 437 阅读 · 0 评论 -
C++运算符&和&&|和||的不同点
我不生产自己不熟悉的内容,我只是陌生内容的搬运工!向原作致敬!&&是逻辑运算符,&是位运算符&和|可以进行逻辑运算也可进行位运算,&&,|| 两边只能是bool类型&,| 两边可以是bool类型或者是数值类型区别:if (A && B) 如果 A 为 false ,整个表达式就为 false,不再计算 B 的值了。if (A & B) 如果 A转载 2015-06-30 13:25:18 · 453 阅读 · 0 评论 -
Codeforces Round #312 (Div. 2)
A. Lala Land and Apple Trees题意:共n颗苹果树,第i棵苹果树位于位置xi长有ai个苹果。Amr想要采苹果,现在他站在x=0的位置,开始的时候他既可以选择往右走也可以选择往左走,在采苹果的过程中,直到他遇见一颗从未“采过”的苹果树他会采这棵树上的所有苹果然后改变其前进的方向,之后按着新的方向采苹果直到遇见一颗未采过的苹果树然后采完再改变方向,以此类推直至在其前进的方向原创 2015-07-17 08:07:53 · 428 阅读 · 0 评论 -
递归调用
今天cf遇见了一点问题,是自己学过却不怎么熟悉的递归调用。 递归定义使人们能够用有限的语句描述一个无穷的集合。C++语言允许一个函数体中出现调用自身的语句,成为直接递归调用。也允许被调用的另一个函数反过来调用原函数,策划功能为间接递归调用。这种功能为递归结构问题提供了求解的实现手段,使程序语言的描述与问题的自然描述完全一直,因而使程序易于理解、易于维护。 通过简单的例子说明递归原创 2015-07-19 14:35:36 · 826 阅读 · 0 评论 -
priority_queue的用法
我不生产自己不熟悉的内容,我只是陌生内容的搬运工!转载 priority_queue调用 STL里面的 make_heap(), pop_heap(), push_heap() 算法实现,也算是堆的另外一种形式。先写一个用 STL 里面堆算法实现的与真正的STL里面的 priority_queue用法相似的priority_queue, 以加深对 priority_queue 的理解转载 2015-09-01 09:05:08 · 462 阅读 · 0 评论 -
类的其他成员
在类定义中,除了可以指定成员的访问权限外,还可以定义各种特殊用途的成员。 一、常成员 在类中,定义常成员用const约束。常数据成员是指数据成员在实例化被初始化后约束为只读;常成员函数是指成员函数的this指针被约束为指向常量的常指针,在函数体内不能修改数据成员的值。 1、常数据成员 在C++的类定义中,const可以约束基本类型的数据成员为常数据成员。因为原创 2015-08-16 16:49:23 · 564 阅读 · 0 评论 -
this指针
C++中,同一类的每个对象都有自己的数据成员的存储空间,但系统不会为每个类的对象建立成员函数副本,类的成员函数可以被各个对象调用。例如,说明一个Tclass类的对象test,函数调用:test.print()在对象test上操作。同样,若说明一个指向Tclass的指针:Tclass *p则函数调用:p->print()在*p上操作。 但从成员函数:void T原创 2015-08-16 15:53:22 · 245 阅读 · 0 评论 -
Codeforces Round #108 (Div. 2)
B. Steps 这道题开始想复杂了,一开始就一步一步的统计每次判断是否越界,结果出现了TLE的错误,原因就是每次在旧位置上增加dx,dy并且不断的判断需要耗费大量的时间,这是不可取的,最初的TLE代码如下:#include#include#includeusing namespace std;typedef long long ll;vector> v;int main原创 2015-08-17 10:03:13 · 447 阅读 · 0 评论 -
C++出现Expression : invalid opedrator < 的解决方法
今天做了一道codeforces的C类题目,题目不是很难,编译的时候一切正常,但等到运行时候出现了Expression : invalid operator <的错误,网上百度了一下成功解决,特此记录。 问题出在VS2013上,从VS2005就开始这样,出现这个错误大概是因为在vs2008后的sort函数里,用的是所谓的“strict weak ordering”,也就是说,如果a=原创 2015-07-24 21:42:32 · 1243 阅读 · 0 评论 -
map类
map类经常用到,能解决很多的问题,我却不怎么会用它。今天好好整理一下。参考《C/C++函数库查询辞典》。 map类用在一个集合中存储和提取数据,其中的每个数据都是一个组队,包括一个数据和一个排序的键值。键值必须是唯一的并用来标定数据的序。键值所对应的数据可以直接被更改,但是键值不能直接被更改,且必须删除旧键才能添加新键。成员名说明count返回指原创 2015-08-06 14:56:03 · 695 阅读 · 0 评论 -
Codeforces Round #318 [RussianCodeCup Thanks-Round] (Div. 2)
A. Bear and Elections 题目不难,问最少经过多少次第一个元素自增其余元素自减使得第一个元素能严格大于其他所有的元素。关键是学会priority_queue的使用。代码如下:#include#include#includeusing namespace std;priority_queue q;int main(){ int n, a, x, i,an原创 2015-09-01 09:08:58 · 551 阅读 · 0 评论 -
Codeforces Round #104 (Div. 2)
B. Lucky Mask题意是说,对给定的a,寻找一个大于a的最小的数取其mask等于b即可,其中保证给定的b为幸运数,取mask的操作是将a从左读到右只读4或者7。学会使用string,string也可以用begin和end函数,且string增加元素可以直接通过加号实现,代码如下:#include#include#includeusing namespace std;stri原创 2015-09-05 09:48:30 · 193 阅读 · 0 评论 -
关于数组太大导致stack over flow
在今天晚上做codeforces的时候,发现了一个问题。题目在这里,请点击B. Luxurious Houses 很简单的题目,开始的时候我想借助algorithm里面的max_element函数来实现,思路正确但是数据量太大导致TLE。现在的思路是倒着比较,同时借助 一个max记录从后往前的最大值。代码如下: #includeusing namespace std;t原创 2015-09-28 22:07:25 · 4747 阅读 · 0 评论 -
散列表 hash table
所谓查找实际上就是要确定关键码等于给定值的记录在查找结构中的存储位置。由于记录的存储位置和关键码之间不存在确定的对应关系,查找只能通过一系列的给定值与关键码的比较。这类查找技术都是建立在比较的基础之上,查找的效率依赖于查找过程中进行的给定值与关键码的比较次数,这不仅与查找集合的存储结构有关,还与查找集合的大小以及待查找记录在集合中的位置有关。 理想的情况是不经过任何比较,直接就能得到待查原创 2015-09-18 09:30:52 · 474 阅读 · 0 评论 -
递归的一点理解和举例
当我们把一个问题划分为几个子问题,而子问题在逻辑上可以相同处理的时候,我们采用递归的方法。比如说,求一个正整数N的阶乘。注意到,当N>=1时,N!=N*(N-1)!,这就是一种递归关系。用代码可以如下描述:int factorial(int n){ if (n == 0) return 1; else return n*factorial(n - 1);} 下面是一个原创 2015-10-08 22:23:53 · 408 阅读 · 0 评论 -
归并排序
导师讲算法时,讲到了归并排序作为举例,而归并排序我都不怎么熟悉了,所以记录一下权当复习之用。在分治策略里,基本上分为两类:黑盒划分策略和白盒划分策略。其中黑盒划分策略根据问题的规模对原问题进行划分,不考虑划分对象的属性值,所以形象地称之为黑盒划分;而白盒划分策略是根据划分对象的特定属性值(也称为参照值)把对象集合划分为若干子集。特别地,对于某些问题,根据白盒划分策略分割的部分子集可以直接排除而不需原创 2015-10-08 22:59:32 · 849 阅读 · 0 评论 -
Codeforces Beta Round #95 (Div. 2)
B. Opposites Attract题意是说,看给定的数中有多少能两两相加为0,求这样的数有多少对。一开始的时候,我直接采用存储起来然后遍历比对,这样想算法是正确的,但是一直判断总会耗费大量的时间,故出现TLE,超时代码如下:#include#includeusing namespace std;vector v;int main(){ int n, a, i, j,原创 2015-09-21 09:28:52 · 438 阅读 · 0 评论 -
map还是想不起来用
Codeforces Beta Round #4 (Div. 2Only) 看原题请点击这里C. Registration system题意是说,输入一个字符串,如果这个字符串之前从来没出现过,就直接输出ok;如果之前已经出现过,则输出原字符串后面加一个数字,加的数字是出现次数减一。比如说第一次输入了一个first,则直接输出ok;当第二次输入first的时候,则应该输出fir原创 2015-10-12 08:36:01 · 533 阅读 · 0 评论 -
今天刚学了一个字符串反转函数
strrev函数用于字符串反转包含头文件:#include功能:把字符串所有的字符反转颠倒过来返回值:返回指向颠倒顺序后的字符串指针代码举例:#include#includeusing namespace std;int main(){ char s[10]; cin >> s; _strrev(s); cout << s << endl; return 0;原创 2015-11-13 15:39:19 · 628 阅读 · 0 评论 -
避免科学计数法输出
在做codeforces题目的时候,有些数非常大,所以采用了double类型,但这样带来了一个问题就是,输出的时候往往是科学记数法输出,导致了即使输出结果正确也不能通过oj,感觉oj是逐次比较的每个数字是否相同,虽然表示的是同一个数,但是不同的表现形式导致了不能通过oj的尴尬!怎么避免这一尴尬呢?包含头文件#include,然后一行代码搞定:cout原创 2016-01-15 16:01:38 · 1694 阅读 · 0 评论 -
用isalpha函数来判断一个字符串中的字符是否是字母
今天刚学会了一个函数用来判断一个字符串中的字符是否为字母,函数名为isalpha,具体内容为下:测试一个元素来包装区域设置是字母字符。以带有颜色区分的格式查看复制到剪贴板template bool isalpha( CharType _Ch, const locale& _Loc )t原创 2015-12-16 11:32:56 · 2384 阅读 · 0 评论 -
总结一种线性复杂度求两个数组(容器)求相同元素个数的方法
我以容器为例,总结一种线性时间求两个容器中相同元素个数的方法,数组也是同样处理,既可以用指针也可以用下标。基本思想就是设置两个下标或者两个指针不断移动比较,在我的代码里,我设置的是两个容器相同大小,不同大小也可以类似处理。代码如下:int NumofSameElem(vi v, vi u)//在这道题里预设两个容器里元素个数相同{ int num = 0, l = v.size(), i=原创 2015-12-16 18:30:37 · 638 阅读 · 0 评论 -
Codeforces Beta Round #35 (Div. 2)
C. Fire Again题意很好理解,意思是说一片森林有几棵树着火了,着火的树总会引燃它的四邻域方向的树,问最后着火的树是哪一棵。代码是参照别人的写的,主要有两个需要总结的地方:1.队列的使用。queue先进先出,可以使用push()将任意数量的元素置入queue中,也可以使用pop()将元素依照其插入次序从容器中移除。换句话说,queue是一个典型的数据缓冲区结构;2.当涉及以一个原创 2015-11-30 10:02:12 · 471 阅读 · 0 评论