随笔分类 - Java
使用java编写的程序或者和java有关的题目
摘要:Wormholes "POJ 3259" 这题是最短路问题中判断是否存在负圈的模板题。 判断负圈的一个关键就是理解:如果在图中不存在从s可达的负圈,最短路径不会经过一个顶点两次。while循环最多执行v 1次。 这题还需要注意的是输入的w条边的权值是负值,因为这是虫洞边。
阅读全文
摘要:Currency Exchange "POJ 1860" 这题其实是最短路问题的变形,但是这里不用求解最短路,而是求解路径中是否存在正圈。如果存在正圈则说明兑换后的货币可以一直增加,否则不能实现通过货币转化来增加财富。 这和经典的使用Bellman Ford判断是否存在负权也有不同的地方,这里需要在
阅读全文
摘要:Heavy Transportation "POJ 1797" 这题是最短路题型的变形,该题不是求起点到终点的最短路,而是求路径中的最小边的最大值。 这题的求解思路是:将原来dijkstra中的松弛方程改一下,改成求最小边的最大值的松弛方程:d[j]=max(d[j],min(d[i],w[i][j
阅读全文
摘要:Til the Cows Come Home "POJ 2387" 这题是最简单的最短路求解题,主要就是使用dijkstra算法,时间复杂度是. 需要注意的是,一定要看清楚题目的输入要求,是先输入边,再输入顶点,一开始我没看清,wrong answer了一次。
阅读全文
摘要:斐波那契数列 "PREV 29" 这题的难度很大,主要是题目中的要求数据量太大,1^18,这不管是运行时间会超时,而且累加的话也会超出long型的大小。 我采用多种方法来求解这道题目,逐步优化算法。 1. 基础解法:直接暴力求解斐波那契数列(得分:40) 我们深入考虑斐波那契的性质: 1.1 f(x
阅读全文
摘要:分巧克力 "PREV 37" 可以使用暴力来求解,但是1^10显然运行时间会超出1s的时间限制。 这里可以通过二分查找的方法来优化这次搜索。
阅读全文
摘要:包子凑数 "PREV 36" 这题首先需要知道不定方程的一些性质,即:ax+by=c的解的情况: 如果a,b互质,则一定有解且由无穷多个。若限制x,y =0,则ax+by=c有可能有负数解,即存在有限个c使得方程无正数解。且存在max{c|使方程无解的c}=a b a b; 如果a,b不互质,则可能
阅读全文
摘要:正则表达式 "PREV 35" 首先看到题目的要求是求解最长的字符串,一看到最长应该想到一般是使用深度优先搜索和动态规划。 本题中求解的是正则表达式,因为符号只有四种,而且括号可以嵌套,所以我们可以从递归的角度求解最长的长度。 当遇到的字符是左括号时,这个时候应该继续递归以等待右括号的出现,当遇到的
阅读全文
摘要:油漆面积 PREV-38 解法一:使用线段树和扫描线模板求解: 一个比较好的关于扫描线和线段树的总结模板:原文链接:https://blog.csdn.net/tomorrowtodie/article/details/52048323 问题:给出若干个矩形,(给的是矩形左上角和右下角坐标),求最后
阅读全文
摘要:分考场 "PREV 53" 这题的解决方法使用dfs,因为数据很小,才100. 每次当前的人人是否可以和前面的组队,设置两个数组group和fri
阅读全文
摘要:合根植物 "PREV 54" 这题主要考察的也是并查集。 直接应用并查集的模板就可以了。
阅读全文
摘要:小计算器 "PREV 55" 这题我使用的是java来求解,因为这题需要求解各种进制的转换。可以利用valueOf和toString来转换各种进制。 值得注意的是:这题有很多细节,因为有的命令之间不是必然连续的,所以需要处理。 我一开始总是运行错误,后来发现这是漏写了一个flag的情况。
阅读全文
摘要:Tram "POJ 1847" 这里其实没有必要使用SPFA算法,但是为了巩固知识,还是用了。也可以使用dijikstra算法。
阅读全文
摘要:Candies "POJ 3159" 这里是图论的一个应用,也就是差分约束。通过差分约束变换出一个图,再使用Dijikstra算法的链表优化形式而不是vector形式(否则超时)。
阅读全文