- 博客(16)
- 问答 (2)
- 收藏
- 关注
原创 【ACM】i++与++i的区别
1.说明首先这里需要引入两个名词就是左值引用和右值引用。i++返回原来的值,但是++i返回加一后的值。++i可以作为左值,但是i++不可以。下面给出几个例子:int i=0;int *p2 = &(++i);//正确int *p1 = &(i++); //错误++i = 1;//正确i++ = 1;//错误下面给出++i和i++的实现机制:(以下代码来自底层实现)// 前缀形式(++i):i
2016-11-27 16:21:52 362
原创 【ACM】二分查找
二分查找是一种效率非常高的算法。 在头文件< algorithm>中已经有二分查找的实现。 而且binary_search()的使用一般是和STL配套使用。(后面有关于STL无序容器的排序函数书写讲解)一:STL二分查找1.binary_search()函数该函数的功能是查看某一值在已经排好的序列中是否存在,当存在的时候返回true,否则返回false。返回值是一个bool类型,也说明了bina
2016-11-27 15:25:54 793
原创 【C++学习】变量和存储区
存储区一般分为以下五种: 栈区: 由编译器在需要的时候进行分配,不需要的时候会自动清空,栈区一般比较小,对于较大的数组不应该放入栈区。 堆区: 由new分配的空间,他们的释放由程序中的语句进行操作。由delete释放,如果没有释放,就会在程序结束时自动回收。 代码区: 存放代码的二进制代码。 全局(静态)存储区: 全局变量和静态变量被分配到同一块内存中。 常量存储区: 存放的数据
2016-11-25 00:54:51 466
原创 【ACM】Map
1.map简介 map的特性是,所有的元素都会根据元素的键值自动被排序,map的所有元素都是pair类型,同时拥有键值和实值。pair的第一元素被看做键值(也就是说是按照第一元素进行排序的),第二元素被看做实值。map不允许两个元素具有相同的键值。在map中是不可以通过map的迭代器改变map的键值,因为map元素的键值关系到map元素的排列规则,任意的改变map元素的键值会严重破坏map组...
2016-11-20 19:13:52 700
原创 【ACM】Pair
首先我们要知道少加载一点头文件是减少运行时间的主要途径之一。 C++中的pair模板包含在头文件 utility 中。一个pair保存两个数据成员。类似容器,pair是一个用来生成特定类型的模板。当创建一个pair的时候,必须提供两个类型名,此时pair的数据成员将具有对应的类型。pair&amp;lt;string, string&amp;gt; p1;pair&amp;lt;string, size_...
2016-11-18 21:13:36 507
原创 【ACM】求素数的多种方法
素数:质数(prime number)又称素数,有无限个。质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数的数称为质数。下面给出求素数的几种不同的算法。 假设我们给定一位数N,现在判断这个数字是不是素数。方法一: 从2开始遍历到N-1 。bool isprime(int x){ if(x == 1) return false;
2016-11-17 20:21:34 1260
原创 【ACM】矩阵快速幂+快速幂+费马小定理
一:矩阵快速幂算法 矩阵快速幂的思想和数的快速幂的思想是一样的,但是需要自己实现矩阵的乘法,然后套用数的快速幂模板即可。 核心: 难点在于构造矩阵,一般用于可以推出递推公式的题目,发现时间复杂度为O(n),因此可以构造一个矩阵,利用矩阵快速幂算法把时间复杂度降低到O(logn)。 矩阵的快速幂算法是用于高效的计算矩阵的高次方的。比如矩阵A*A*A*A*A*A可以变为(A*A)(A*A)(A*...
2016-11-08 19:17:17 1151
原创 【ACM】区间DP(石子合并)
石子合并是经典的动态规划,有以下3种题型。 1.有N堆石子,现在要将石子有序的合并成一堆,规定如下:每次只能移动任意的2堆石子合并,合并花费是新合成的一堆石子的数量。现在求将这N堆石子合并为一堆的总花费最小(或最大)。分析:贪心算法,每次选择最小(或最大)的两堆合并,实际上是哈夫曼的变形。2.有N堆石子,现在要将石子有序的合并成一堆,规定如下:每次只能合并相邻的2堆石子,合并花费是新合成的一堆石子
2016-11-06 11:19:19 635
原创 【ACM】OJ常见错误原因(随时更新)
Waiting:正在评测程序。 Compiling:正在编译程序。 Accepted:程序正确。 Wrong Answer:程序运行结果与正确结果不一样。 Time Limit Exceeded:运行时间超出了要求。 Memory Limit Exceeded:程序运行占用内存超出了标准。 Runtime Error:程序在运行的时候异常退出。 Compile Error:编译错误。(
2016-11-05 17:23:56 4448
原创 【ACM】INT_MAX和INT_MIN注意事项
INT_MIN在标准头文件limits.h中定义。#define INT_MAX 2147483647#define INT_MIN (-INT_MAX - 1)在C/C++语言中,不能够直接使用-2147483648来代替最小负数,因为这不是一个数字,而是一个表达式。表达式的意思是对整数21473648取负,但是2147483648已经溢出了int的上限,所以定义为(-INT_MAX -1)。C
2016-11-04 19:36:18 29328
原创 【ACM】最大连续子段和
最大连续子段和定义 给定n个整数(可能为负数)组成的序列a[1…n],求该序列中形如a[i]+a[i+1]+…+a[j]的子段和的最大值。当所给的数字均为0的时候,最大子段和定义为0。 方法一: 在不考虑时间的情况下,使用循环暴力的方法,求出序列的所有子段和。该方法会有3层循环嵌套。时间复杂度为O(n^3)。#include &lt;cstdio&gt;#include &lt...
2016-11-04 17:08:49 750
原创 【ACM】冒泡排序
Bubble Sort原理:相邻的2个数进行比较。 每次经过一趟比较,最大数或者最小数就会被交换到最后一位。for(int i=0;i&lt;len-1;i++) for(int j=i;j&lt;len;j++) if(大小比较) 交换;如果是按照从小到大的顺序进行排序,只需要把前n-1个大的数归为到后面的n-1位即可,所以外层循环只需要到l...
2016-11-04 09:31:58 561
原创 【ACM】acm文件输入输出测试小技巧
一:文件测试数据代码如下:#include &lt;cstdio&gt;#include &lt;algorithm&gt;#include &lt;iostream&gt;using namespace std;int main(){ freopen("in.txt","r",stdin);
2016-11-02 21:25:02 3151
原创 【ACM】string和stringstream使用
一:stringstring 是c++ 提供的字符串类型,不限长度。头文件#include &lt; string&gt; 声明: string s; string s=”china”; 和char数组不同的是string对象中不含\0,也就是说如果是一个三个字符的字符串,在string s[]中仅仅到s[2]就会结束。操作 string对象声明 ...
2016-11-02 19:25:21 642
原创 【ACM】stringstream切割字符串
stringstream切割字符串 string num; stringstream ssnum; getline(cin,num); ssnum.clear(); ssnum.str(num); int i=0; while(1) { ssnum&gt;&gt;a[i++]; if(ssnu...
2016-11-02 19:12:01 804
空空如也
快速幂算法的改版问题
2016-11-06
html 中的<title>中文乱码
2016-11-04
TA创建的收藏夹 TA关注的收藏夹
TA关注的人