学习笔记
jz-nice
这个作者很懒,什么都没留下…
展开
-
快速幂取模(二分思想)
快速幂取模就是在O(logn)内求出a^n mod c的值。 原理很简单用到定理 (a*b)%c=(a%c)*(b%c);所以 n为偶数,a^n%c= (a^(n/2)%c)*(a^(n/2)%c)n为奇数,只需要再乘以a%c因此很容易设计出一个基于二分的递归算法。代码:long long quickmod(int a,int n,int c){ i原创 2013-05-22 10:15:57 · 1027 阅读 · 0 评论 -
单链表的逆置(头插法)
#include #include using namespace std;struct node{ int data; struct node *next;}*root;void Init(){ node *p = (node *)malloc(sizeof(node)); root = p; for(int i = 1; i <= 10;原创 2014-07-11 10:02:52 · 1300 阅读 · 0 评论 -
顺序容器的insert用法
#include #include #include #include #include using namespace std;//顺序容器的insert用法//顺序容器:vector,deque,list,forward_list,array,string//-------------------------------------------------//array不原创 2014-07-25 09:25:34 · 1506 阅读 · 0 评论 -
*****
1、圆周率:PI=acos(-1.0) 自然对数: e=exp(1.0)原创 2014-04-21 11:12:33 · 505 阅读 · 0 评论 -
pair用法
pair的类型: pair 是 一种模版类型。每个pair 可以存储两个值。这两种值无限制。当一个函数需要返回2个数据的时候,可以选择pair#include using namespace std;int main(){ typedef pair pid; typedef pair pis; pid ii = make_pair(1,2);//生成一个原创 2014-03-19 19:43:13 · 1046 阅读 · 0 评论 -
prim算法
普利姆(Prime)算法(只与顶点相关) 算法描述:普利姆算法求最小生成树时候,和边数无关,只和顶点的数量相关,所以适合求稠密网的最小生成树,时间复杂度为O(n*n)。算法过程:1.将一个图的顶点分为两部分,一部分是最小生成树中的结点(A集合),另一部分是未处理的结点(B集合)。2.首先选择一个结点,将这个结点加入A中,然后,对集合A中的顶点遍历,找原创 2014-01-16 15:43:37 · 1247 阅读 · 0 评论 -
位运算
(1)、按位与(&),将两个操作数化为二进制后并将对应的每一位分别进行逻辑与操作。(a%(2^n)=a&(2^n-1))(2)、按位或(|),将两个操作数化为二进制后并将对应的每一位分别进行逻辑或操作。(3)、按位异或(^),和以上同,异或是指对应位相同则运算结果为0,否则为1。(4)、按位取反(~),对每一位进行取反。(求x的相反数:x=(~x+1))(5)、移位转载 2013-11-29 20:04:47 · 743 阅读 · 0 评论 -
二分查找求上、下界
最近比赛很多题目都用到了二分,主要考察的就是二分查找求上下界。二分很方便,也很常用,学好二分很有必要。二分的思想就不赘述,相信每个人明白,值得注意的就是二分查找求上下界。二分查找:int pow(int *a,int n,int t)//二分查找{ int low = 0, high = n; while(low < high) { int原创 2013-11-09 20:59:51 · 1871 阅读 · 1 评论 -
中缀表达式转化为后缀表达式(栈的应用)
中缀表达式:是一个通用的算术或逻辑公式表示方法, 操作符是以中缀形式处于操作数的中间(例:3 + 4),中缀表达式是人们常用的算术表示方法。后缀表达式:不包含括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左向右进行(不再考虑运算符的优先规则,如:(2 + 1) * 3 , 即2 1 + 3 *中缀表达式转化为后缀表达式规则:1)如果是原创 2013-08-23 16:33:04 · 1607 阅读 · 0 评论 -
并查集
并查集:并查集的一般用途就是用来维护某种具有自反、对称、传递性质的关系的等价类。并查集一般以树形结构存储,多棵树构成一个森林,每棵树构成一个集合,树中的每个节点就是该集合的元素,找一个代表元素作为该树(集合)的祖先。并查集支持以下三种操作:1、Make_Set(x)把每一个元素初始化为一个集合初始化后每一个元素的父亲节点是它本身,每一个元素的祖先节点也是它本身。2、Fi原创 2013-07-23 17:05:04 · 1110 阅读 · 0 评论 -
sscanf的用法
1. 常见用法。char buf[512] ;sscanf("123456 ", "%s", buf);//此处buf是数组名,它的意思是将123456以%s的形式存入buf中!printf("%s\n", buf);结果为:1234562. 取指定长度的字符串。如在下例中,取最大长度为4字节的字符串。1sscan转载 2013-07-07 18:20:32 · 710 阅读 · 0 评论 -
康拓展开 & 逆康拓展开
题目:给出n个互不相同的字符, 并给定它们的相对大小顺序,这样n个字符的所有排列也会有一个顺序.?现在任给一个排列,求出在它后面的第i个排列.这是一个典型的康拓展开应用,首先我们先阐述一下什么是康拓展开。(1)康拓展开 所谓康拓展开是指把一个整数X展开成如下形式: X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[2]*1!+a[1原创 2013-05-21 22:15:07 · 3239 阅读 · 0 评论 -
c++ vector(向量)使用方法详解(顺序访问vector的多种方式)
vector是向量类型,它可以容纳许多类型的数据,如若干个整数,所以称其为容器,本文介绍一下使用方法vector 是向量类型,它可以容纳许多类型的数据,如若干个整数,所以称其为容器。vector 是C++ STL的一个重要成员,使用它时需要包含头文件: 代码如下:#include;一、vector 的初始化:可以有五种方式,举例说明如下:(1) ve转载 2015-04-12 19:44:48 · 795 阅读 · 0 评论