Tag: 算法

断项链USACO问题

破碎的项链 你有一条N红色,白色或蓝色珠子项链(3 <= N <= 350),其中一些是红色,另一些是蓝色,其他是白色,随意排列。 以下是n = 29的两个示例: 1 2 1 2 rbbrbrrb rbbb rrbr rrwr brww bbrr bbbb bbrb rrbr brrr brrr rrrb rbrrrw Figure A Figure B r red bead b blue bead w white bead 在下面的文本中考虑第一和第二的珠子已在图片中标出。 图A中的配置可以表示为b和r的串,其中b表示蓝色珠子,r表示红色珠子,如下所示:brbrrrbbbrrrrrbrrbbrbbbbrrrrb。 假设你要在某个时候打破项链,直接铺设,然后从一端收集相同颜色的珠子,直到你到达不同颜色的珠子,并为另一端做同样的事情(可能不是与此之前收集的珠子颜色相同的颜色)。 确定项链应该被打破的点,以便可以收集大量的珠子。 例 例如,对于图A中的项链,可以收集8个珠子,其中断裂点在珠子9和珠子10之间或者在珠子24和珠子25之间。 在一些项链中,包括白色珠子,如上面的图B所示。 收集珠子时,遇到的白色珠子可以被视为红色或蓝色,然后涂上所需的颜色。 表示此配置的字符串将包含三个符号r,b和w。 这是USACO训练问题,我遇到了麻烦; 我一直得到错误的答案。 …请不要告诉我这是愚蠢的或愚蠢的; 这没有帮助! :d

使用primefaces变量在Java中实现互斥锁

我想使用primefaces变量在Java中实现一个互斥锁。 我尝试使用lamport烘焙算法实现它,它的工作原理。 但是我不知道如何实现它,如果我之前不知道线程的数量。 此外,lamport算法不断增加标签,并且会出现溢出,如何避免这种情况?

找到数组中最长的连续体,连续体中的值之和等于零模3

我写了一个代码,找到数组中最长的连续体,连续体中的值之和等于零模3,例如对于数组a[]={2,-3,5,7,-20,7} 我们有2-3 + 5 + 7-20 = -9所以输出是5, 我的问题是复杂性,现在它是O(n^3)一只小鸟低声说我可以在O(n) public class mmn { public static void main(String[] args) { int a[]={2,-3,5,7,-20,7}; int r=what(a); System.out.println(r); } private static int f(int[]a,int low, int high) { int res=0; for (int i=low;i<=high;i++) res+=a[i]; return res; } public static int what(int[]a) { int temp=0; for(int i=0;i<a.length;i++) { for (int j=i;jtemp) […]

解决QR拼图的算法

我正在构建算法,以从相同大小的瓦片数量自动解决/重建QR码。 我的方法: 获得3个正方形中的一个:位置正方形 使用ImageMagic以某种方式获取外部黑色边框的宽度 给出的例子是14px x 14px (更新:它可能是13px×13px) 将其设置为常量:BLOCK_SIZE 开始循环匹配VALID磁贴和已编译的QR码块 VALID是:无与伦比的,而不是3个角落瓷砖(大黑方块)中的任何一个 4.1。 渲染已编译的qr块和1个随机有效磁贴的所有可能组合,直到找到匹配为止 4.2如果找到匹配(可以通过已编译/组合的QR码块的一侧放置图块),则记录匹配 4.3比赛条件: 没有黑色区域的宽度和高度符合以下等式: AREA_HEIGHT % BLOCK_SIZE == 0 && AREA_WIDTH % BLOCK_SIZE == 0 现在出现了一些实施并发症: 如何实现匹配tile到tile的算法(或者已编译/组合的QR码块)? 我认为ImageMagic可以解决它。 目标是获得原始的QR码。 ZIP中的QR瓷砖示例 UPDATE 正如我所看到的那样,解决方案缩小以使ImageMagick扫描并找出是否可以将两个图块组合在一起而不破坏QR码的规则。 算法应该尝试并排放置2个区块并扫描边界区域。 诀窍是测量连接瓷砖的黑线/块的宽度和高度。 怎么做? UPDATE2 如果使用2列宽度为1px的磁贴匹配,则在某些情况下还不够。 例如,两种算法都将这2个图块连接到: 有效 和 无效 正如你在INVALID中看到的那样,第二个瓦片的一部分(右边的那个)被红色箭头去掉了,但是由于1px算法的比较 – 算法并不关心这种情况。 Hance无效QR。 UPDATE3 http://dropcanvas.com/6bl6v 档案包含: join.png无效 有效的join.png src1.png SRC2,invalid.png SRC2,valid.png […]

剪纸石的算法

我使用以下方法,但有点想知道是否有更好的算法来执行测试。 有没有更好的方法呢? 在C#中执行此操作但将语法放在一边,相信该算法在OOP语言中将是相同的。 谢谢。 public String play(int userInput) { //ComputerIn is a randomly generated number between 1-3 ComputerIn = computerInput(); if (ComputerIn == userInput) return “Draw”; else if (ComputerIn == 1 && userInput == 2) return “Win”; else if (ComputerIn == 2 && userInput == 3) return “Win”; else if (ComputerIn == 3 && userInput […]

益智游戏Android DFS算法

我有一个名为Islands和bridge的android应用程序,也称为Hashiwokakero 应用程序使用A 2 Dimensional数组,每次用户重新启动游戏时随机生成群岛它形成一个数字从0到4的矩阵,其中0 = null和1-4 =岛可以有2个桥从一个岛出来连接另一方面,目前的地图无法解决。 为了解决游戏,用户需要使用网桥连接岛屿,因此如果岛屿= 4则需要4个连接,如果岛屿= 2则需要2个连接等等。 在我的研究中,我发现解决游戏的最佳算法是使用深度优先搜索 – 文章 我在这里看了不同的问题,但似乎无法找到解决方案,因为我的数组是String类型而不是integer 。 问题如何应用DFS算法连接岛? 这是我的应用程序的屏幕截图。 这个函数创建了一个简单的map 4×4矩阵: private void InitializeEasy() { Random rand = new Random(); String[][] debug_board_state = new String[4][4]; setCurrentState(new State(WIDTH_EASY)); for (int row = 0; row < debug_board_state.length; row++) { for (int column = 0; column < debug_board_state[row].length; column++) { […]

2D KD树和最近邻搜索

我正在按照此处描述的算法实现KD树和最近邻搜索: http : //ldots.org/kdtree/ 我遇到了几种不同的方法来实现KD树,其中一个点存储在内部节点中,另一个只存储在叶节点中。 因为我有一个非常简单的用例(我需要做的只是构造一次树,它不需要修改),我采用了仅叶子的方法,它实现起来似乎更简单。 我已成功实现了所有内容,树总是成功构建,并且在大多数情况下,最近邻搜索返回正确的值。 但是,我有一些问题,对于某些数据集和搜索点,算法返回不正确的值。 考虑一下要点: [[6, 1], [5, 5], [9, 6], [3, 81], [4, 9], [4, 0], [7, 9], [2, 9], [6, 74]] 构建一个看起来像这样的树(借口我糟糕的图表): 方形叶节点是包含点的节点,并且圆形节点包含用于在该深度处分割列表的中值。 当在这个数据集上调用我的最近邻居搜索,并寻找[6, 74]的最近邻居时,算法返回[7, 9] 。 虽然这正确地遵循算法,但它实际上并不是[6, 74]的最接近点。 最近的点实际上是[3, 81] ,其距离为7.6, [7, 9]距离为65。 以下是绘制的点,对于可视化,红点是我试图找到最近邻居的点: 如果有帮助,我的搜索方法如下: private LeafNode search(int depth, Point point, KDNode node) { if(node instanceof LeafNode) return […]

根据模式生成所有二进制数

给定一个模式,我们需要通过填充模式中缺少的位置0和1来生成所有可能的二进制数。 Eg Pattern = “x1x”; Output = [010, 110, 011, 111] 我通过创建方法calculate解决了它。 public static List calculate(String input, int currentIndex) { List result = new ArrayList(); if(currentIndex > input.length()-1) { result.add(“”); return result; } for(String fragment: calculate(input, currentIndex + 1)) { if(input.charAt(currentIndex)==’x’) { result.add(‘0’ + fragment); result.add(‘1’ + fragment); } else { result.add(input.charAt(currentIndex) + fragment); } […]

使用copyPixelsToBuffer时Android如何应用alpha通道?

相关主题(尚未提供解决方案): 访问ARGB_8888 Android Bitmap中的原始数据 简而言之:当使用copyPixelFromBuffer和copyPixelsToBuffer ,Android已经在RGB通道上应用了Alpha通道。 我需要将其转换为原始的ARGB值,反之亦然。 我不知道Android如何应用它。 你能告诉我配方吗?

如何在服务中检测长按音量键?

我想在服务中检测音量键中的长按。 以下是我的选择: A)让用户从锁定屏幕控制音量 在屏幕关闭时,我不想检测用户是否按下了服务中的音量按钮。 我已经尝试过(使用2天)使用contentObserver ,但问题是contentObserver检测到音量变化,并且当屏幕关闭时音量不会改变。 有什么方法可以让用户从锁定屏幕控制音量? B)从服务中检测长按音量按钮 我怎样才能做到这一点? 屏幕关闭时是否可以使用任何广播接收器? 有没有办法在服务中实现dispatchKeyEvent ? 我见过这个 ,但对我来说,第二个答案在后台不起作用。 我认为最简单的方法是选项A因为我已经为用户更改音量设置了所有内容,所以我可以让用户从锁定屏幕控制音量吗? 如果没有,还有什么我可以做的吗? 非常感谢, Ruchir