随笔- 107
文章- 0
评论- 6
阅读-
96196
08 2016 档案
gcd和ex_gcd
摘要:gcd就是欧几里得算法,可以快速的求出俩个数的最大公因数,进而也可以求其最大公倍数(俩数之积除以最大公因数),比较简单直接看代码就好了,一般用递归版,简短精简,敲得快,但如果数剧奇葩,怕溢出,那就用递推版的。 递归版: int gcd(int a,int b) { if(b==0) return a
阅读全文
递归趣文
摘要:公认的递归(Recursion)的标准定义是非常难理解的:若一个对象部分地包含它自己,或用它自己给自己定义,则称这个对象是递归的;若一个过程直接地或间接地调用自己,则称这个过程是递归的过程。 递归一词很少有过专业的定义,因此本文不在于去解释上一段文字的意义。虽然概念抽象,但递归其本身是不难理解的。通
阅读全文
算法实质【Matrix67】
摘要:动态规划 :你追一个MM的时候,需要对该MM身边的各闺中密友都好,这样你追MM这个问题 就分解为对其MM朋友的问题,只有把这些问题都解决了,最终你才能追到MM。 因此,该问题适用于聪明的MM,懂得“看一个人,不是看他如何对你,而是看 他如何对他人。”的道理,并且对付这样的MM总能得到最优解。但确定是
阅读全文
并查集
摘要:在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合中。 如果n比较大,那么反复询问你某个元素所在集合,你该怎么做? 如果每次都遍历,那么显然会超时,那么用一些数据结构比如建树什么的,很可
阅读全文
KMP
摘要:KMP算法是用来求这类问题:求子串a在字符串b中的个数。 索引:如果我们按照普通方法求这个问题就是一一比较,然后移一位再一一比较,,,这样的结果显示是超时,因此前辈们总结出一种算法,它可以不需要一位一位的移,有时候可以移好多位,这样就可以很快得出答案了。 在这个算法中我们首先要对子串a进行分析,子串
阅读全文
欧拉函数+素数筛
摘要:欧拉函数,就是欧拉发现的一个关于求素数的的公式,然后我们编个函数实现这个公式。 欧拉发现求小于等于n的正整数中有多少个数与n互质可以用这个公式: euler(x)=x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…(1-1/pn),其中p1,p2……pn为x的所有素因数,x是不为0
阅读全文
快速幂+大数取模
摘要:快速幂,其实就是求(a^b)% p,(其中a,b,p都比较大在int范围内)这类问题。 首先要知道取余的公式:(a*b)%p=(a%p*b%p)%p。 那么幂不就是乘机的累积吗,由此给出代码: int fast(int a,int b,int p) { long long a1=a,t=1; whi
阅读全文
01背包
摘要:以前在acm课上也讲过一些关于背包的题,不过那些比较简单,就是简单的贪心问题,先排个序再处理就完了,而01背包,感觉就是比那个上了一个难度的问题,这个需要遍历然后找其中合适的,简单原理就是这样。 例如:现在有容量为m的背包,还有重量为w,价值为v的k个不同的商品,问怎样买才能使价值最大化? 思路:如
阅读全文
深搜,广搜
摘要:在acm课上听陈宇讲过几个搜索题,当时就是照猫画虎,按照他给的代码改改就能过,那个代码比较巧,好记的: int dfs(int i,int j) { if(i<0||i>=n||j<0||j>=m||map[i][j]=='#||v[i][j]==1) //越界或搜索过退出 return 0; v[
阅读全文
c++中stl容器的常用示例
摘要:1、 set(集合)——包含了经过排序了的数据,这些数据的值(value)必须是唯一的。 也就是说输入set容器后得到数据,会去重并排序。 s.insert()插入一个元素 s.begin() s.end()分别返回首尾指针 s.clear() 清空集合 遍历需要利用迭代器set<类型>::iter
阅读全文