
ACM
文章平均质量分 73
Harden13up
这个作者很懒,什么都没留下…
展开
-
对字符串数组进行快速排序
import java.util.Scanner;/** * 字符串数组排序,利用快排的思想 * @author xiaobangsky * time:2014-10-13 * */public class Main { static Scanner scan = new Scanner(System.in); public static void quickSort(St...原创 2019-09-18 19:15:37 · 852 阅读 · 0 评论 -
Leetcode 768
这个问题和“最多能完成排序的块”相似,但给定数组中的元素可以重复,输入数组最大长度为2000,其中的元素最大为10**8。arr是一个可能包含重复元素的整数数组,我们将这个数组分割成几个“块”,并将这些块分别进行排序。之后再连接起来,使得连接的结果和按升序排序后的原数组相同。我们最多能将数组分成多少块?示例 1:输入: arr = [5,4,3,2,1]输出: 1解释:将数组...原创 2019-08-25 00:20:58 · 242 阅读 · 0 评论 -
几道比较简单动态规划(DP)之背包
动态规划(Dynamic Programming,简称DP),动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法。一般是把一个大问题分成很多个子问题来求最优解。背包问题也是动态规划一种常见的问题,01背包问题是基础。GDUFE OJ1131 1132 1133 ...原创 2018-08-09 22:02:34 · 339 阅读 · 0 评论 -
Hashmap类和TreeSet类
Hashmap类:对于Hashmap的用法,这里只是一道小例题。Hashmap是非常强大的类,而且应用广泛。具体查java API 和其他博客。Gdufe_2018_Summer III(J) BabelfishYou have ju...原创 2018-07-30 16:24:22 · 411 阅读 · 0 评论 -
欧拉函数、费马小定理、Lucas定理
这里只是说这三个定理的一些皮毛而已,后面附上了其他大佬比较优秀的博客。欧拉函数:欧拉定理:a^(φ(m))≡1 (mod m) (a与m互质,且a>m) 后面的mod m是两边都要取模的欧拉函数的定义: 在数论中,对于正整数<=N ,且与N互质的正整数(包括1)的个数,记作φ(n)。 (素数p的欧拉函数是p-1(只是去除了本身))φ函数的值:φ(...原创 2018-07-30 16:06:59 · 345 阅读 · 0 评论 -
树状数组
数组c[x]是存放【x-lowbit(x)+1,x】的区间的数和 , lowbit(x) = x&(-x)。 lowbit(4)=0,lowbit(6)=2 查询【0-x】区间的数和(或者其它):ans = c[本身]+c[本身-lowbit]+c[x - x&(-x)]。。。。。。一直到[]内的值等于0结束private static int...原创 2018-07-29 11:14:21 · 205 阅读 · 0 评论 -
线段树
线段树:是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。当不是一个满二叉树的时候,编号也是一个满二叉树的形式。建树: //实际上是从最底层开始赋值,然后再递归回来对上面的区间进行赋值 private static void BuildTreeSum(int l, int r, int rt) {//rt为树的编号,Sum[]...原创 2018-07-29 10:47:19 · 219 阅读 · 0 评论 -
生成函数表达式(求一个问题的方案数)
生成函数表达式: 求一个规定组合有多少个方案。通过模拟表达式运算来实现。eg1:现有三种水果:苹果,梨子和西瓜。其中买苹果的数量必须为偶数个,梨子的数量必须为3的倍数,西瓜的数量不多于4个,问买n个水果,有多少种方案数?2018_Summer III K(比较像eg1)苹果:G1 = (x^0+x2+x4.....)梨子:G2 = (x^0+x^3+x^6+.....)西瓜...原创 2018-07-28 20:59:15 · 894 阅读 · 0 评论 -
康托展开与逆康托展开
康托展开:已知一个序列,求这个序列排在第几位。X = a[n]*(n-1)!+a[n-1]*(n-2)!+……+a[i]*(i-1)!+……a[1]*0!a[i]为当前未出现的元素中是排在第几个(从0开始),即后面有多少个元素比当前位元素小。逆康托展开:已知一个序列排在第几位,求这个序列元素的具体排序。利用的是:n!>(n-1)!+(n-2)!+(n-3)!+……+1!+0!已知...原创 2018-07-28 20:40:58 · 238 阅读 · 0 评论 -
素数筛
素数筛:Vis[]数组记录是否为素数,初始状态为全是素数。从零开始,0和1不是素数,标记为false,然后一个循环,从2开始,首先判断是否为素数,是的话,用prime[]数组存起来,cnt记录素数的个数。再然后一个循环,遍历小于i的prime[j]素数,然后再记录标记数组vis【i*prime[j]】为false。当i%prime[j]==0,break;为什么当i%prime[j]==0...原创 2018-07-28 20:29:55 · 301 阅读 · 0 评论 -
拓扑排序
拓扑排序用途:对于有向图来说,可以判断图中是否存在环,可以得出拓扑序列,从而可以进行一系列的操作。方法: 用一个二维链表,装每个元素所指向的下个元素的集合;用一个数组存放元素入度的大小;用一个队列来协助。 先从入度为0的点开始,入队。查找队首元素(同时队首元素出队)所指向的元素的集合,把这个集合里的元素的入度一,并 判断集合中元素的入度是否等于0。若等于0,把该集合的元素加...原创 2018-07-28 20:00:49 · 197 阅读 · 0 评论 -
广度优先搜索
广度优先算法(BFS)(一般用队列来辅助,一般没有递归,用个走到的条件跳出while循环):是先把自己周围能到达的点先做完,然后再进行下一步,最先到达终点,那肯定是最佳路径。一般解决最短路径问题(SummerII K,L题)这里附上一题:Gdufe_2018_Summer IIFarmer John has been informed of the location of a fug...原创 2018-07-28 17:23:18 · 202 阅读 · 0 评论 -
深度优先搜索
深度优先算法(DFS)(一般用个伪递归,这样可以更方便地回溯):是遍历自己所能到达的地方,能到达就走,直到不能走的时候,进行回溯,然后继续进行遍历(每走一步,标记自己所走的路)。(SummerII E,G,H题) 这里附上一题:Gdufe_2018_Summer II(E)Due to recent rains, water has pooled in various plac...原创 2018-07-28 17:07:09 · 348 阅读 · 0 评论 -
大数类BigInteger,高精度类BigDecimal
这个博客,我只想单纯地说明java,BigInteger和BigDecimal的强大C++的快速幂取模,在java中可以用BigInteger封装的方法来代替。BigDecimal实现了高精度的算法,是一个非常强大的类,在java API可以查具体强大的用法,因为用法太多了,在这里就不具体写了 先写一下BigInteger的一个例子:Gdufe_2018_Summer II ...原创 2018-07-28 11:16:47 · 309 阅读 · 0 评论 -
并查集
并查集:就是有多个帮派,一个帮派有一个大哥; //这是听了某位老哥的一个说法并:假如有两个帮派的大哥相同,那么可以把这两个帮派合成一个帮派查:假如查一个人的大佬是别人,别人的大佬又是别人......直到有一个人的大佬是自己,那么这个人就是这个集合的大佬集:集合,每个帮派是一个集合。有多少个集合就是有多少个帮派。 Gdufe_2018_Summer I (R)...原创 2018-07-28 10:10:45 · 315 阅读 · 0 评论 -
约瑟夫环(一个普通的递推关系)
约瑟夫环:一般就是从一个人的时候(胜利者的下标是0)开始推到第n个人的时候,胜利者的下标是什么。f(1) = 0;f(i) = (f(i-1)+k)%i; // i表示当前环 人的人数,k表示每k个人杀。 Gdufe_2018_Summer I (G)Let’s play a stone removing game.Initially, n ston...原创 2018-07-28 09:43:51 · 544 阅读 · 0 评论 -
最大公约数(gcd)和最小公倍数(lcm)
求最大公约数(gcd):辗转相除法求最小公倍数(lcm):a*b/gcd(a,b) (在代码中也可以这样写 a/gcd(a,b)*b ,这样是为了避免数越界 ) 附上一道水题的代码: Gdufe_2018_Summer I (D)Write a program which computes the greatest common divisor (GCD) ...原创 2018-07-28 09:23:05 · 561 阅读 · 0 评论 -
List的两个儿子ArrayList和LinkedList的区别和优缺点(附上ACM的一道题)
List是一个接口,它有LinkedList、ArrayList和Vector。Vector和ArrayList有点类似。而现在我们只讨论LinkedList和ArrayList之间区别:LinkedList的数据结构是一个链表,队首操作比较快(push()比较快),队尾操作和ArrayList差不多。随机访问比较慢。ArrayList的数据结构是一个数组,队首操作比较慢,因为每次队首...原创 2018-07-26 16:58:39 · 350 阅读 · 0 评论 -
java迭代器(Iterator)
java的迭代器(Iterator)的小应用 :Iterator是一个接口,必需用ArrayList、LinkedList等等类里的方法进行实例化。以下是Iterator所封装的方法。boolean hasNext() 如果仍有元素可以迭代,则返回 true。 E next() 返回迭代的下一个元素。 void...原创 2018-07-26 15:46:31 · 232 阅读 · 0 评论