摘要:
简单的二元一次方程求解 阅读全文
摘要:
黑白棋的设计 代码如下: 阅读全文
摘要:
packet 包的用法 "参考博客:https://www.cnblogs.com/Ring1981/p/6240412.html" 用法 阅读全文
摘要:
Problem Description 某部队进行新兵队列训练,将新兵从一开始按顺序依次编号,并排成一行横队,训练的规则如下:从头开始一至二报数,凡报到二的出列,剩下的向小序号方向靠拢,再从头开始进行一至三报数,凡报到三的出列,剩下的向小序号方向靠拢,继续从头开始进行一至二报数。。。,以后从头开始轮 阅读全文
摘要:
AC自动机模板 2.4.1 头文件&宏&全局变量 2.4.2 辅助函数 2.4.3 主要函数 2.4.4 可选参考函数 2.4.5 用法 阅读全文
摘要:
"参考博客" 失配指针原理 使当前字符失配时跳转到另一段从root开始每一个字符都与当前已匹配字符段某一个后缀完全相同且长度最大的位置继续匹配,如同KMP算法一样,AC自动机在匹配时如果当前字符串匹配失败,那么利用失配指针进行跳转。由此可知如果跳转, 跳转后的串的前缀必为跳转前的模式串的后缀 ,并且 阅读全文
摘要:
字典树 知识补充 ‘\0’和‘\n’的区别 '\0' 是一个字符串的结尾 '\n' 是换行符 gets 和 scanf 的区别 gets()函数总结: gets() 从标准输入设备读取字符串,以回车结束读取,使用'\0'结尾,回车符'\n'被舍弃没有遗留在缓冲区。 可以用来输入带空格的字符串。 可以 阅读全文
摘要:
拓扑排序 writer:pprp 分析: 建立一个队列,将所有入度为0的节点放到队列中 输出该节点,更新与其相连的其他点的入度 再次将所有更新节点中入度为0的点加入队列 算法思路: 每次选取一个入度为0的点,将其从该图中删除,再按照以上步骤进行依次删除,如果不能删除那么说明存在环状结构导致没有入度为 阅读全文
摘要:
广度搜索 链式前向星表示法 writer:pprp 分析: 参数:当前节点的标号为bfs的参数 注意:要另外开一个VIS数组进行涂色,涂过色的就不要再涂色了 head数组应该全置 1,VIS数组全置0 遍历的时候利用到了queue进行操作,注意应该在qu.front()和qu.pop()的位置 代码 阅读全文
摘要:
深度搜索 链式前向星表示法 writer:pprp 分析: 参数:当前节点的标号为dfs的参数 注意:要另外开一个VIS数组进行涂色,涂过色的就不要再涂色了 head数组应该全置 1,VIS数组全置0 遍历的条件应该注意一下 k = edge[k].next 代码如下: 阅读全文
摘要:
链式前向星 writer:pprp 分析:比较难以理解,关键代码其实很短 如下: 结点声明: 建立语句: 遍历语句: include using namespace std; const int maxn = 1000; struct node { int to; int w; int next; 阅读全文
摘要:
邻接表表示 用vector实现 writer:pprp 代码如下: include using namespace std; const int maxn = 1000; struct node { int to; int w; node(int tt, int ww):to(tt),w(ww){} 阅读全文
摘要:
前向星的建立和遍历 writer:pprp 注意:从0开始不是从1开始 链式前向星算法可以对应点特别多的情况,可以存储重复边,但不能直接判断图中任意两点是有边。 代码如下: //writer:pprp //前向星表示 //注意:点的编号也是从0开始的,不能从1开始 include include i 阅读全文
摘要:
writer:pprp date:20171103 题目描述 先将根结点放入一对圆括号中,然后把它的子树按由左而右的顺序放入括号中,而对子树也采用同样方法处理:同层子树与它的根结点用圆括号括起来,同层子树之间用逗号隔开,最后用闭括号括起来。 例如下图可写成如下形式 (a(b,c,d,e)) 现在给定 阅读全文
摘要:
writer:pprp date: 20171103 题目描述 给定一棵二叉树的中序和层序输出,判断是否为平衡二叉树的。如果是,输出YES如果不是输出NO。 输入 树结点个数 中序遍历序列 层序遍历序列 输出 是否是平衡二叉树的判断结论 样例输入 样例1: 3 1 2 3 2 1 3 样例2: 4 阅读全文
摘要:
Huffman Tree 题目描述 对输入的英文大写字母进行统计概率 然后构建哈夫曼树,输出是按照概率降序排序输出Huffman编码。 输入 大写字母个数 n 第一个字母 第二个字母 第三个字母 ... 第n个字母。 输出 字母1 出现次数 Huffman编码 字母2 出现次数 Huffman编码 阅读全文
摘要:
数据结构实习 Problem H 迷宫的最短路径 题目描述 设计一个算法找一条从迷宫入口到出口的最短路径。 输入 迷宫的行和列m n 迷宫的布局 输出 最短路径 样例输入 6 8 0 1 1 1 0 1 1 1 1 0 1 0 1 0 1 0 0 1 0 0 1 1 1 1 0 1 1 1 0 0 阅读全文
摘要:
题意如下: 已知二叉树采用二叉链表存储,其结点结构定义如下: 编写计算二叉树中节点data值等于给定x值的结点个数算法,p指向二叉树的根节点,BinaryTree为二叉树类。函数原型为: int BinaryTree::CountNode(BinTreeNode p,T x); 分析: 这个题我本来 阅读全文
摘要:
由二叉树的中序层序重建二叉树 writer:pprp 用层序中序来重建二叉树 "代码点这里" 其实本质上与前序中序建立二叉树没有什么太大区别 大概思路: 递归解法,对当前层进行处理,通过层序遍历可以得到当前的根节点,然后在中序遍历中找到该节点,对左右两边的内容进行分析,理想情况下应该是可以递归进行下 阅读全文
摘要:
用前序中序建立二叉树并以层序遍历和后序遍历输出 writer:pprp 实现过程主要是通过递归,进行分解得到结果 代码如下: include include include include using namespace std; const int N = 1000; struct tree { 阅读全文
摘要:
答:有以下四种方法判定循环队列的空满(假设头为front尾为rear,循环队列的最大为Maxsize) 预留一位:可以空余出来一个存储单元,不储存任何数,则判空条件是front%Maxsize == rear%Maxsize 判满条件是(front+1)%Maxsize == rear增加一个全局变 阅读全文
摘要:
同余问题 基本定理: 若a,b,c,d是整数,m是正整数, a = b(mod m), c = d(mod m) 1. a+c = b+c(mod m) 2. ac = bc(mod m) 3. ax+cy = bx+dy(mod m) 同余式可以相加 4. ac = bd(mod m) 同余式可以 阅读全文
摘要:
数据结构作业 之 循环队列的实现 主要思路: 设置标志法: 设置一个bool型的judge标记,初始化为false; 如果入队列成功,judge为true,如果出队列成功,judge设为false 判空条件是front%Maxsize == rear%Maxsize && judge == 0 判满 阅读全文
摘要:
梅森素数 定义: if m是一个正整数 and 2^m 1是一个素数 then m是素数 if m是一个正整数 and m是一个素数 then M(m)=2^m 1被称为第m个梅森数 if p是一个素数 and M(p)是一个素数 then M(p)被称为梅森素数 Lucas Lehmer判定法:判 阅读全文
摘要:
梅森素数 定义: if m是一个正整数 and 2^m 1是一个素数 then m是素数 if m是一个正整数 and m是一个素数 then M(m)=2^m 1被称为第m个梅森数 if p是一个素数 and M(p)是一个素数 then M(p)被称为梅森素数 Lucas Lehmer判定法:判 阅读全文
摘要:
组合素数 nefu119 题意:求解C(2n,n)恰好被p整除多少次 由组合数公式可以将其转化为: (2 n)!/(n! n!) 则将题目转化为求解分子关于q的幂,减去分子关于q的幂 用公式 n!的素因子分解中素数p的幂为[n/p]+[n/p^2]+[n/p^3]...0 (p^t include 阅读全文
摘要:
算数基本定理 每个大于1的正整数都可以被唯一分解为素数的成绩,在乘积中的素因子按照非降序排列 a = p1^a1 p2^a2 ... pn^an; b = p1^b1 p2^b2 ... pn^bn; gcd(a,b) = p1^min(a1,b1) p2^min(a2,b2) ... pn ^ m 阅读全文
摘要:
埃拉托色尼筛法 基本素数判别法: 正整数n是素数,当且仅当他不能被任何一个小于sqrt(n) 的素数整除 定理: 如果m是一个合数,那么n一定有一个不超过sqrt(n)的素因子 推论: 如果n是一个合数,那么n必有小于等于sqrt(n)的素因子 6N+1法 任何数都可以构造成6N+1,6N+2,6N 阅读全文
摘要:
哥德巴赫猜想 nefu2 & 分拆素数和 hdu2098 //哥德巴赫猜想 include include include using namespace std; bool isprime[10000000]; int main() { memset(isprime,1,sizeof(isprim 阅读全文
摘要:
素数个数的位数 nefu 117 普及一个公式: 位数公式:要求一个数x的位数,用公式:lg(x)+1 素数分布:n/ln(n) 所以直接求解n/ln(n)的位数就可以了 代码如下: include include using namespace std; const double e = 2.71 阅读全文