随笔分类 - ACM
算法竞赛学习笔记
摘要:题目:小美的数组合并 小美拿到了一个数组,她每次操作可以将两个相邻元素ai合并为一个元素,合并后的元素为原来两个元素之和。小美希望最终数组的最小值不小于k。她想知道有多少种不同的合并结果? 输入描述 第一行输入两个正整数n,k,代表数组大小和数组的最大值。 第二行输入个正整数ai,代表小美拿到的数组
阅读全文
摘要:问题大意:m个人围坐成一圈,编号为0~m-1,从0号的人开始报数,他先报0,报到k-1的那个人出局,然后下一个人继续从0开始报,下一个报到k的人又出局……一直重复直到最后环内剩下一个人,求这个人的编号。
除了直接用链表模拟整个过程的方法之外,还有一种稍加推导得到递推关系,然后递归的方法。
阅读全文
摘要:在原本暴力连乘的幂运算的基础之上,用二分的思路降低幂运算的时间的算法,就是快速幂算法。
阅读全文
摘要:素数筛,其实是将合数给筛掉的一个过程。求某个大小范围内的素数个数,是用到素数筛的最最基础的问题。本文中介绍了判断单个数是否为素数的方法与埃氏筛法、欧拉筛法两种素数筛。
阅读全文
摘要:什么是kmp算法呢?这是一个处理字符串的算法,用来判断给出的模式串p是否存在于文本串t中(p的长度小于t)。 在本文中,字符串储存在字符数组中,并且第一个字符放在下标为1的元素中。 那么如何理解kmp算法呢?首先要从最朴素的匹配算法说起。 我们判断p是否存在于t中,最原始的方法就是从头到尾一直遍历。
阅读全文
摘要:这是一道DP的经典模板题。该类问题的题意就是:对于一个蛋,如果它在第m层楼摔不碎,但是在第m+1层摔碎了,那么它的硬度就是m。现在有若干个蛋,若干层楼,现在你的每一次尝试的结果都会是最坏的情况,问你在这种运气最不好的情况下要至少尝试几次才能找到这个硬度。
阅读全文
摘要:二分查找,简而言之就是在一个有序的序列中找一个元素,因为这些元素已经有序,所以每次都将要找的数跟待寻找序列的中间元素比较,如果要找的数大于中间元素,说明接下来只需要在该序列的右半边中找,所以可以不用管左半边了,这样每次都排除一半的元素直到最后找到要找的元素。我们可以用两个变量代表待寻找序列的最左端索
阅读全文
摘要:基本定义:如果树上的某一个节点的最大子树的节点数最小,那么这个节点就是树的重心。
阅读全文