- 博客(23)
- 收藏
- 关注
原创 大数加减乘除等的模板以及1000以内阶乘的模板
#include#include#include#include#include#include#includeusing namespace std;#define maxn 9999#define maxsize 1000#define dlen 4class BigNum{private: int a[1005]; //可以控制大数的位数 int le
2016-05-20 16:07:32 540
原创 51nod 1005 大数加法(可为负数)
给出2个大整数A,B,计算A+B的结果。Input第1行:大数A第2行:大数B(A,B的长度 Output输出A + B没什么思路,就是转化为字符串之后模拟。#include #include #include #include using namespace std;int cons
2016-05-20 13:12:54 1289
原创 gdb基本调试命令
因为近期在vim编辑器里面尝试着写写程序,然后就接触到了gdb调试。才刚刚接触还是不很懂,像什么设置断点呀单步调试呀什么的,现在还没怎么用上。在这里只是先写一些自己刚刚学到的。之后的以后用到了在补充。首先是在vim里面写好了一个简单的程序,保存为test_1.c.#include int main(){ int a,b;
2016-05-15 11:33:50 356
原创 vim查找替换
注:本内容来自实验楼课程一、字符的替换及撤销(Undo操作)1.替换和撤销(Undo)命令替换和Undo命令都是针对普通模式下的操作命令说明r+将游标所在字母替换为指定字母R连续替换,直到按下Esccc替换整行,即删除游标所在行,并进入插入模式
2016-05-11 21:00:49 302
原创 vim文档编辑
注:本内容来自实验楼课程一、vim重复命令1.重复执行上次命令在普通模式下.(小数点)表示重复上一次的命令操作拷贝测试文件到本地目录$ cp /etc/protocols .打开文件进行编辑$ vim protocols普通模式下输入x,删除第一个字符,输入.(小数点)会再次删除一个字符,除此之外也可以重复dd的删除操作
2016-05-11 20:37:01 495
原创 vim快速入门
注:本内容来自实验楼的课程知识二、vim模式介绍以下介绍内容来自维基百科Vim从vi演生出来的Vim具有多种模式,这种独特的设计容易使初学者产生混淆。几乎所有的编辑器都会有插入和执行命令两种模式,并且大多数的编辑器使用了与Vim截然不同的方式:命令目录(鼠标或者键盘驱动),组合键(通常通过control键(CTRL)和alt键(ALT)组成)或者鼠标输入。Vim和vi一样,
2016-05-11 20:08:17 360
原创 POJ1985+POJ2631 求一棵树的直径
这两个题目都是求解一棵树的直径,也就是书里面的最长的一段距离。树的直径是指树的最长简单路。求法: 两遍BFS(dfs) :先任选一个起点BFS(dfs)找到最长路的终点,再从终点进行BFS(dfs),则第二次BFS(dfs)找到的最长路即为树的直径。证明网上有很多,在此就不写了。下面分别列出两种方法,一种是bfs,一种是dfs。//POJ 1985#
2016-05-11 18:14:47 1713
原创 51nod1072 求解一个图里面的强联通分量
给出一个无向图G的顶点V和边E。进行Q次查询,查询从G的某个顶点V[s]到另一个顶点V[t],是否存在2条不相交的路径。(两条路径不经过相同的边)(注,无向图中不存在重边,也就是说确定起点和终点,他们之间最多只有1条路)这个题目,我们看到是一个无向图。可以转换成有向图之后再来处理。我们可以想到,两个点因为本来是无向的转化成有向的之后,那么看有没有两条不相交的路径就是看这
2016-05-11 11:41:54 707
原创 求解二叉树中两个节点的最近公共祖先(LCA)
/************************************************************************//* 非递归的方法下面是一个简单的复杂度为 O(n) 的算法,解决LCA问题1) 找到从根到n1的路径,并存储在一个向量或数组中。2)找到从根到n2的路径,并存储在一个向量或数组中。3) 遍历这两条路径,直到遇到一个不同的节点,则前面的
2016-05-10 21:44:55 1858
原创 根据前序遍历和中序遍历构建二叉树以及根据中序遍历后序遍历构建二叉树
/************************************************************************//* 算法说明:由中序遍历序列可知,第一个节点是根节点,由前序遍历序列可知,第一个节点是根节点的左子树节点,而且前序遍历中,根节点左边是左子树,右边是右子树,因此通过中序遍历的根节点可以确定的是:根节点在前序遍历中的位置(通过遍历前序遍历
2016-05-10 21:07:12 975
原创 CUGOJ 1682
经过一段时间的学习后,张同学发现小胡数学非常棒,于是决定追求数学成绩很好的女生小胡。小胡其实是想拒绝他的,但是小胡找不到好的说辞,于是提出了这样的要求:对于给定的两个正整数N和M,张同学随机选取一个N的因数Nf,小胡随机选取一个M的因数Mf,如果Nf和Mf相等,她就答应张同学。小胡让张同学去编写一个随机程序,到时候她看过程序没有问题了就可以用来抽签了。但是张同学写着写着,却越来越觉得机会渺茫。
2016-05-09 15:59:31 984
原创 CUGOJ 1681 求解最长回文字符串
Manacher算法:求解最长回文字符串,时间复杂度为O(N)这一个题目因为对于所有的数据,满足1,字符串长度字符串的长度很长,不能使用我们平时使用的类似于dp的开两维数组的解法,所以我们只有一种专门来求解这一类问题的解法,Manacher算法:求解最长回文字符串,时间复杂度为O(N)。#include #include #include #include #inclu
2016-05-09 15:55:54 400
原创 51nod1119 机器人走方格 组合数学
M * N的方格,一个机器人从左上走到右下,只能向右或向下走。有多少种不同的走法?由于方法数量可能很大,只需要输出Mod 10^9 + 7的结果。题目本身很简单,就是一个初中都推倒过的理论,只能向下或者向右的话,那么可能的路径一共有C(n+m,n)种。很好理解的这里就不说明了。现在我们要解决的是,当n和m都比较大的时候怎么讲结果计算出来。#include
2016-05-05 16:27:30 1428
原创 51nod 1066 Bash游戏
有一堆石子共有N个。A B两个人轮流拿,A先拿。每次最少拿1颗,最多拿K颗,拿到最后1颗石子的人获胜。假设A B都非常聪明,拿石子的过程中不会出现失误。给出N和K,问最后谁能赢得比赛。例如N = 3,K = 2。无论A如何拿,B都可以拿到最后1颗石子。Input第1行:一个数T,表示后面用作输入测试的数的数量。(1 <= T <= 10000)第2 - T + 1
2016-05-04 20:47:45 559
原创 51nod 1069 Nim游戏
有N堆石子。A B两个人轮流拿,A先拿。每次只能从一堆中取若干个,可将一堆全取走,但不可不取,拿到最后1颗石子的人获胜。假设A B都非常聪明,拿石子的过程中不会出现失误。给出N及每堆石子的数量,问最后谁能赢得比赛。例如:3堆石子,每堆1颗。A拿1颗,B拿1颗,此时还剩1堆,所以A可以拿到最后1颗石子。Nim游戏。(Bouton's Theorem):对于
2016-05-04 20:20:00 766
原创 51nod 1072 博弈 威佐夫游戏
有2堆石子。A B两个人轮流拿,A先拿。每次可以从一堆中取任意个或从2堆中取相同数量的石子,但不可不取。拿到最后1颗石子的人获胜。假设A B都非常聪明,拿石子的过程中不会出现失误。给出2堆石子的数量,问最后谁能赢得比赛。例如:2堆石子分别为3颗和5颗。那么不论A怎样拿,B都有对应的方法拿到最后1颗。Input第1行:一个数T,表示后面用作输入测试的数的数量。(1
2016-05-04 15:42:46 374
原创 51nod1070 博弈
有一堆石子共有N个。A B两个人轮流拿,A先拿。每次拿的数量最少1个,最多不超过对手上一次拿的数量的2倍(A第1次拿时要求不能全拿走)。拿到最后1颗石子的人获胜。假设A B都非常聪明,拿石子的过程中不会出现失误。给出N,问最后谁能赢得比赛。例如N = 3。A只能拿1颗或2颗,所以B可以拿到最后1颗石子。Input第1行:一个数T,表示后面用作输入测试的数的数
2016-05-03 16:39:09 510 2
原创 51nod1068 博弈
有一堆石子共有N个。A B两个人轮流拿,A先拿。每次拿的数量只能是2的正整数次幂,比如(1,2,4,8,16....),拿到最后1颗石子的人获胜。假设A B都非常聪明,拿石子的过程中不会出现失误。给出N,问最后谁能赢得比赛。例如N = 3。A只能拿1颗或2颗,所以B可以拿到最后1颗石子。(输入的N可能为大数)Input第1行:一个数T,表示后面用作输入测试的
2016-05-03 14:57:22 935
原创 51nod 1067 博弈
有一堆石子共有N个。A B两个人轮流拿,A先拿。每次只能拿1,3,4颗,拿到最后1颗石子的人获胜。假设A B都非常聪明,拿石子的过程中不会出现失误。给出N,问最后谁能赢得比赛。例如N = 2。A只能拿1颗,所以B可以拿到最后1颗石子。Input第1行:一个数T,表示后面用作输入测试的数的数量。(1 <= T <= 10000)第2 - T + 1行:每行1个数N。(1
2016-05-03 14:25:57 459
原创 linux学习笔记入门之环境变量和文件查找
环境变量与文件查找一、环境变量1.变量要解释环境变量,得先明白变量是什么,准确的说应该是 Shell 变量,所谓变量就是计算机中用于记录一个值(不一定是数值,也可以是字符或字符串)的符号,而这些符号将用于不同的运算处理中。通常变量与值是一对一的关系,可以通过表达式读取它的值赋值给其它变量,也可以直接指定数值赋值给任意变量。为了便于运算和处理,大部分的编程语言会区分变量的类型
2016-05-02 21:33:16 3976
原创 51nod1417 博弈
多年后,每当Noder看到吉普赛人,就会想起那个遥远的下午。Noder躺在草地上漫无目的的张望,二楼的咖啡馆在日光下闪着亮,像是要进化成一颗巨大的咖啡豆。天气稍有些冷,但草还算暖和。不远的地方坐着一个吉普赛姑娘,手里拿着塔罗牌,带着耳机,边上是她的狗。狗看起来有点凶,姑娘却漂亮。Noder开始计算各种搭讪方式的成功概率,然而狗的存在......。奇怪的事情发
2016-05-02 16:55:26 549
原创 51node1091 线段的最长交集(贪心)
X轴上有N条线段,每条线段包括1个起点和终点。线段的重叠是这样来算的,[10 20]和[12 25]的重叠部分为[12 20]。给出N条线段的起点和终点,从中选出2条线段,这两条线段的重叠部分是最长的。输出这个最长的距离。如果没有重叠,输出0。排序之后直接贪心就可以了。#include #include #include #include
2016-05-02 15:24:43 1059
原创 二分查找
本文写了二分查找有序数组以及二分查找循环有序数组的算法。循环有序数组是,一个有序数组从中间截断了然后拼在一起。大致思路:先确定单调区间,然后根据判断指定点是否在单调区间内,剪掉另外一半区域~~如此循环。直到循环跳出,或者找到指定值对应的位置为止结束。#include #include #include using namespace std;//二分查找
2016-05-02 14:02:23 433
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人