------ACM------
文章平均质量分 84
想飞的小菜鸡丶
这个作者很懒,什么都没留下…
展开
-
欧几里得算法和扩展欧几里得算法
欧几里德算法欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。基本算法:设a=qb+r,其中a,b,q,r都是整数,则gcd(a,b)=gcd(b,r),即gcd(a,b)=gcd(b,a%b)。第一种证明: a可以表示成a = kb + r,则r = a mod b 假设d是a,b的一个公约数,则有 d|a, d|b,而原创 2016-07-29 16:14:37 · 400 阅读 · 0 评论 -
HHU暑期第四弹——动态规划入门(01背包+完全背包+多重背包+最长上升子序列和公共子序列)
第三弹动态规划入门的主要内容有以下几部分:01背包,完全背包,多重背包,最长上升子序列和公共子序列。一、01背包有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使价值总和最大。从这个题目中可以看出,01背包的特点就是:每种物品仅有一件,可以选择放或不放。 (1-1)原创 2016-08-18 00:59:59 · 1212 阅读 · 0 评论 -
HHU暑期第二弹——数据结构初步(二叉搜索树+队列与优先队列+堆栈Stack+完全二叉树与满二叉树+哈希表)
第二弹数据结构初步的主要内容有以下几部分:二叉搜索树、优先队列与滑动窗口、矩阵和栈、完全二叉树与满二叉树、哈希表。一、二叉搜索树1、 二叉查找树(BinarySearch Tree,也叫二叉搜索树,或称二叉排序树Binary Sort Tree)或者是一棵空树,或者是具有下列性质的二叉树: (1)、若它的左子树不为空,则左子树上所有结点的值均小于它的根结点的值; (原创 2016-08-05 21:36:22 · 1498 阅读 · 2 评论 -
HHU暑期第五弹——图论入门(图的搜索+连通性+最短路径+生成树+二分图匹配+最大流)
第五弹图论入门的主要内容有以下几部分:图的搜索、连通性、最短路径、生成树、二分图匹配、最大流等内容。一、图的搜索二、连通性三、最短路径四、生成树五、二分图匹配六、最大流原创 2016-08-19 15:39:37 · 2181 阅读 · 0 评论 -
HHU暑期第三弹——数据结构进阶(线段树+树状数组+并查集)
第三弹数据结构进阶的主要内容有以下几部分:线段树、树状数组、并查集。一、线段树一:线段树基本概念1:概述线段树,类似区间树,是一个完全二叉树,它在各个节点保存一条线段(数组中的一段子数组),主要用于高效解决连续区间的动态查询问题,由于二叉结构的特性,它基本能保持每个操作的复杂度为O(lgN)!性质:父亲的区间是[a,b],(c=(a+b)/2)左儿子的区间是原创 2016-08-15 10:50:39 · 1143 阅读 · 0 评论 -
状态压缩DP 与 树状DP
本文摘自依然博客---http://blog.sina.com.cn/acmstart状态压缩动态规划 动态规划的状态有时候比较难,不容易表示出来,需要用一些编码技术,把状态压缩的用简单的方式表示出来。典型方式:当需要表示一个集合有哪些元素时,往往利用2进制用一个整数表示。 *:一般有个数据 n *:确定了为状态DP,那么第一步就原创 2016-10-13 20:10:12 · 517 阅读 · 0 评论 -
【字符串匹配】——KMP(看毛片算法)——深入讲解next数组的求解
【经典算法】——KMP,深入讲解next数组的求解前言 之前对kmp算法虽然了解它的原理,即求出P0···Pi的最大相同前后缀长度k;但是问题在于如何求出这个最大前后缀长度呢?我觉得网上很多帖子都说的不是很清楚,总感觉没有把那层纸戳破,后来翻看算法导论,32章 字符串匹配虽然讲到了对前后缀计算的正确性,但是大量的推理证明不大好理解,没有与程序结合起来讲。今天我在这原创 2016-10-03 10:55:42 · 1367 阅读 · 0 评论 -
码一波题单+HDOJ题目分类
初期:一.基本算法: (1)枚举. (poj1753,poj2965) (2)贪心(poj1328,poj2109,poj2586) (3)递归和分治法. (4)递推. (5)构造法.(poj3295) (6)模拟法.(poj1068,poj2632,poj1573,poj2993,poj2996)二.图算法:翻译 2016-08-03 20:59:37 · 2711 阅读 · 0 评论 -
STL vector用法介绍+ STL 常用函数用法
介绍这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作。本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和for_each()中的使用。通过阅读这篇文章读者应该能够有效地使用vector容器,而且应该不会再去使用C类型的动态数组了。 Vector总览vector是C++标准模板库中的部分内容,它是一个多功能转载 2016-07-20 20:23:44 · 6705 阅读 · 0 评论 -
博弈sg函数
A Simple Nim原创 2016-08-05 01:34:58 · 1120 阅读 · 0 评论 -
HHU暑期第一弹——小小小数论(欧拉函数+埃式筛法+分解质因数+欧几里得算法+扩展欧几里得算法和模线性方程)
第一弹数论的主要内容有以下几部分:欧拉函数、埃式筛法、分解质因数、欧几里得算法、扩展欧几里得算法和模线性方程。1、欧拉函数(连续求n个数的欧拉函数)#includeusing namespace std;int main(){ int phi[100];// 用于筛法开素数表 int dive[100];//用于储存1~n的每个数的欧拉函数 int n; cin>>n;原创 2016-07-30 14:35:05 · 1099 阅读 · 0 评论 -
Fibonacci 数列O(logn)解法
传统解法提到斐波那契数列(Fibonacci Sequence),首先想到的是经典的动规(DP)算法。时间复杂度O(n),这里空间复杂度可以优化到O(1)。代码如下:int fib_n(int n){ int dp[3] = {1, 1}; if (n 1) return dp[n]; for (int i = 2; i i)原创 2017-08-07 20:07:48 · 686 阅读 · 0 评论 -
Dijkstra算法、Bellman-Ford算法、Floyd算法
Dijkstra算法Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法能得出最短路径的最优解,但由于它遍历计算的节点很多,所以效率低。Dijkstra算法是很有代表性的最短路算法,在很多专业课程中都作为基本内容有详细的介绍,如数据结构,图论,运筹学等等。原创 2016-08-20 16:22:23 · 1334 阅读 · 0 评论 -
sort和qsort排序
函数名功能描述sort对给定区间所有元素进行排序stable_sort对给定区间所有元素进行稳定排序partial_sort对给定区间所有元素部分排序partial_sort_copy对给定区间复制并排序nth_element找出给定区间的某个位置对应的元素is_sorted判断一个区间是否已经排好原创 2016-07-23 15:48:22 · 379 阅读 · 0 评论 -
二叉树遍历及查找、统计个数、比较、求深度的递归实现
树形结构是一类重要的非线性数据结构,其中以树和二叉树最为常用。二叉树是每个结点最多有两个子树的有序树。通常子树的根被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用作二叉查找树和二叉堆或是二叉排序树。二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分,次序不能颠倒。二叉树的第i层至多有2的 i -1原创 2016-08-04 11:59:03 · 3463 阅读 · 0 评论 -
二分查找
升序序列的二分查找:int bsearchWithoutRecursion(int array[], int low, int high, int target){ while(low <= high) { int mid = (low + high)/2; if (array[mid] > target) high =原创 2016-08-02 11:25:08 · 246 阅读 · 0 评论 -
排序方法汇总
1、排序一 冒泡排序目录要点 算法思想算法分析 冒泡排序算法的性能 时间复杂度 算法稳定性优化完整参考代码 JAVA版本参考资料相关阅读要点冒泡排序是一种交换排序。什么是交换排序呢?交换排序:两两比较待排序的关键字,并交换不满足次序要求的那对数,直到整个表都满足次序要求为止。 算法思想它重复地走访过要排序的数列,原创 2016-08-02 10:00:32 · 565 阅读 · 0 评论 -
逆元+快速幂+模板
今天我们来探讨逆元在ACM-ICPC竞赛中的应用,逆元是一个很重要的概念,必须学会使用它。 对于正整数和,如果有,那么把这个同余方程中的最小正整数解叫做模的逆元。 逆元一般用扩展欧几里得算法来求得,如果为素数,那么还可以根据费马小定理得到逆元为。 推导过程如下 求现在来看原创 2016-07-30 19:37:34 · 2100 阅读 · 0 评论 -
ACM常用经典算法
时间复杂度(渐近时间复杂度的严格定义,NP问题,时间复杂度的分析方法,主定理) 排序算法(平方排序算法的应用,Shell排序,快速排序,归并排序,时间复杂度下界,三种线性时间排 序,外部排序) 数论(整除,集合论,关系,素数,进位制,辗转相除,扩展的辗转相除,同余运算,解线性同余方程,中国剩余定理)指针(链表,搜索判重,邻接表,开散列,二叉树的表示,多叉树的表原创 2016-07-29 20:03:12 · 3415 阅读 · 0 评论 -
ACM中常见错误对应表
Waiting:你的程序刚刚提交,正在等待OJ评测你的程序。 Compiling:OJ正在编译你的程序。 Accepted:OK!你的程序是正确的 ^_^。 Wrong Answer:你的程序运行的结果和正确结果不同。状态页面CASE那一览显示的是你的程序在第几个样例上出错的。 Time Limit Exceeded:你的程序运行原创 2016-07-29 19:57:36 · 548 阅读 · 0 评论 -
ACM做题过程中的一些小技巧
1.一般用C语言节约空间,要用C++库函数或STL时才用C++;cout、cin和printf、scanf最好不要混用。大数据输入输出时最好不要用cin、cout,防止超时。2.有时候int型不够用,可以用long long或__int64型(两个下划线__)。值类型表示值介于 -2^63 ( -9,223,372,036,854,775,808) 到2^63-1(原创 2016-07-29 19:55:46 · 569 阅读 · 0 评论 -
各算法复杂度大全
图例绝佳不错一般不佳糟糕 数据结构操作数据结构时间复杂度空间复杂度 平均最差最差 访问搜索插入删除访问搜索插入删除 数组O(原创 2016-07-29 18:23:24 · 554 阅读 · 0 评论 -
二叉树、平衡二叉树、完全二叉树、满二叉树
基本概念结点的层次(Level)从根开始定义,根为第一层,根的孩子为第二层。二叉树的高度:树中结点的最大层次称为树的深度(Depth)或高度。 二叉树在计算机科学中,二叉树是每个结点最多有两个子树的有序树。通常子树的根被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用作二叉查找树和二叉堆。二叉树的每个结点至多原创 2016-07-29 16:32:38 · 524 阅读 · 0 评论 -
树状数组 和 归并排序 求逆序数
树状数组,具体的说是 离散化+树状数组。这也是学习树状数组的第一题.算法的大体流程就是:1.先对输入的数组离散化,使得各个元素比较接近,而不是离散的,2.接着,运用树状数组的标准操作来累计数组的逆序数。算法详细解释:1.解释为什么要有离散的这么一个过程? 刚开始以为999.999.999这么一个数字,对于int存储类型来说是足够了。原创 2016-07-29 10:10:06 · 312 阅读 · 0 评论 -
后来涨了些姿势
1、printf sacnf 需要导入stdio.h包。2、while(scanf(“%d”,&n)!=EOF)表示一直处于输入状态,在本机对话框里结束输入的话要先摁Enter再摁Ctrl+Z最后再摁Enter键结束输入。3、调用system("pause")来观察输出结果。4、C语言的逻辑运算符都是短路运算符,一旦能够确定整个表达式的值就不要再计算。——短路逻辑5原创 2016-07-28 10:52:08 · 366 阅读 · 0 评论 -
史上最强大大数模版
#include #include #include using namespace std; #define DIGIT 4 //四位隔开,即万进制 #define DEPTH 10000 //万进制 #define MAX 100 typedef int bignum_t[MAX+1]; /********原创 2017-08-13 19:20:07 · 292 阅读 · 0 评论