- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
这是不久前的高中学位编码竞赛问题。基本想法是仅通过矩形异或运算(或者他们这么调用它)来重新创建一幅黑白画。
让我们假设我们有这幅我们正在尝试重新创建的画(表示为二进制矩阵,0 表示黑色,1 表示白色):
1 0 0
1 1 1
1 0 1
重建这幅画的一种方法是以下操作:
(0, 0) (2, 2)
(1, 0) (2, 0)
(1, 2) (1, 2)
操作的形式为(xStart, yStart) (xEnd, yEnd)
因此,如果我们从全黑 Canvas 开始,上述操作将执行以下操作:
beginning:
0 0 0
0 0 0
0 0 0
after (0, 0) (2, 2) :
1 1 1
1 1 1
1 1 1
after (1, 0) (2, 0) :
1 0 0
1 1 1
1 1 1
after (1, 2) (1, 2) :
1 0 0
1 1 1
1 0 1
关于作业的技术:
(xStart, yStart) (xEnd, yEnd)
。我想出了几个方法来做到这一点。我将在此处按从坏到好的顺序列出它们。
异或所有像素:
我们可以通过简单地将 1 写入空白 Canvas 来重新创建这幅画,其中 1 驻留在我们试图重新创建的画中。这个解决方案是所有解决方案中最简单和最明显的。所需的操作次数基本上就是画中白色像素的数量。
异或所有水平相邻的白色:
这是对第一个解决方案的重大改进,但仍然非常简单明了。在这种方法中,我们简单地异或所有水平相邻的白色。这样,例如操作
(0, 0) (0, 0)
(1, 0) (1, 0)
(2, 0) (2, 0)
将减少到 (0, 0) (2, 0)
。
异或矩形:
我认为这是对之前方法的明显跟进,我们可以将其视为高度为 1 的矩形的异或运算 - 现在我们只需向矩形添加第二个维度,进一步改进我们的结果。我通过获取白色最多的矩形来确定 XORable 区域。改进还是不错的。
异或最大的区别:
这与上述方法略有不同,并且更加蛮力。在这种方法中,我找到与绘画差异最大的矩形,并对它进行异或。例如,如果我们有这幅画
1 0 1
0 1 1
0 1 0
和全黑 Canvas ,最大的区别在于矩形(0, 0) (2, 1)
,它的区别是2。我通过获取所有绘画的不同颜色,在上述情况下为 4,然后从中减去相同颜色的数量,在上述情况下为 2。所以 different_colors - same_colors = difference
。
在上面的绘画和空白 Canvas 中,有许多矩形产生相同的差异。另一个是 (1, 0) (2, 2)
。
这种方法相对于前一种大型绘画的改进最小,但仍然是一种改进。有趣的是,这种方法有时会得出比之前的小画作更糟糕的解决方案(虽然不记得有多小了)。
我拥有的用于上述方法的任何代码早已丢失。你能想出令人叹为观止的解决方案吗?是否有来自外太空的神奇方法?我发现这个问题(帖子)很有趣,想看看是否有人能提出任何建议。
关于标签
我用 Java 和 C++ 标记了这个,不是因为这个问题特别涉及那些语言,而是因为我可以轻松理解用这些语言编写的任何代码,以及具有相似语法的语言。
最佳答案
我认为,要完成这个任务,我们需要找到仅包含零的最大尺寸子矩阵的坐标。
我可以解释该算法,但我认为以下链接有最好的解释:
Maximum size sum-matrix with all 1s in binary matrix
这里的解决方案是针对全1的,我们可以修改为全0。
然后我们只需要从最大值中找到坐标,就可以进行运算了。
如果我能想到更好的方法,我会更新。
关于java - 使用最少 "XOR"操作重新创建二进制矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27244772/
XOR 的各个部分如何命名? A xor B = C A和B叫什么 对于分部,它是: A / B = C A = 除数,B = 被除数,C = 商 对于和(和 XOR 与和一样对称)它是 A + B
我在算法方面遇到了问题。 我有一个用于 IO 的字节,可以使用称为 XorAndXor 的方法设置其中的某些位。该算法的工作原理如下: newValue = (((currentValue XOR x
我很惊讶地看到一个 BPMN 图,其中一个异或决策(“XOR-Split”)用相同的网关符号“关闭”。 我真的想知道证明这种方法合理的原因是什么。在我看来,这是多余的。 事实似乎是,XOR-Join
我在查看 XOR 链接列表的实现时多次遇到这段代码,但似乎没有一个人正确解释了这一行(或者也许我错过了一些东西) - struct node* XOR (struct node *a, struct
这应该是一个简单的问题。我是 Coq 的新手。 我想在 Coq 中定义exclusive or in Coq(据我所知,这不是预定义的)。重要的部分是允许多个命题(例如 Xor A B C D)。 我
我试图记住数学是如何计算出来的,以计算循环冗余检查中 XOR 算法的剩余部分,以验证网络消息的剩余位。 我不应该扔掉那本教科书。 这在代码中很容易完成,但是如何手工完成呢? 我知道它看起来有点像标准除
给定一个数字 N 和一个整数数组(所有整数都小于 2^15)。 (A 是数组 100000 的大小) 从数组中找到 N 和整数的最大 XOR 值。 Q是查询次数(50000)和开始,停止是数组中的范围
这更像是一个有趣的问题。我正在研究 SC61860 CPU,它是 8 位 CPU,用于 1987 年的 Sharp PC-1360 掌上电脑(也用于 PC-1401 和 1403)。它的指令集实际上并
我正在尝试在 c 中进行某种异或文件加密,并在 javascript 中进行解密(使用 this 作为基础,现在我遇到了以下问题: 例如我想在 C 中执行 73^122,结果是 57,但在 javas
我的任务是计算数组中字节的异或和: X = char1 XOR char2 XOR char3 ... charN; 我正在尝试将其并行化,改为对 __m128 进行异或运算。这应该提供加速因子 4。
我有一系列错误或 View ( Seq[Xor[Error,View]] ) 我想将其映射到第一个错误(如果有)或 View 序列的异或 ( Xor[Error, Seq[View]] ) 或者可能只
这是我想做的一个例子:假设我有 5 个类,我想表达这样的约束,即我们可以将类“B”或/和“C”的实例链接到“A”,如果是这样,我们就不能拥有其他任何东西,如果我们不这样做没有这些类的任何实例,我们只能
因此我们可以确定异或距离度量是一个真实的度量(它是对称的,满足三角不等式等) 在阅读 Kademlia 及其 k-buckets 之前,我在想每个节点都会简单地找到自己的 id 并存储其最近的 k 个
该函数用于计算一个32位整数的异或 int xor32int(int x, int y) { int res = 0; // Initialize result // Assuming
我是加密新手,我正在尝试解释以下代码。即, 是什么?什么意思? 我有一个 secret_key key 。我也有一个 unique_id。我使用下面的代码创建垫。 pad = hmac.new(sec
我正在尝试将一些 javascript 代码复制到 python 中,由于某种原因,javascript 中的 XOR 运算符 (^) 给我的值与 python 中的 XOR 运算符 (^) 不同。我
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
这个问题在这里已经有了答案: Does Typescript support mutually exclusive types? (7 个答案) 关闭 3 年前。 我怎么说我希望一个接口(inter
我有一些未知的 C++ 代码是在发布版本中编译的,因此对其进行了优化。我正在努力解决的问题是: xor al, al add esp, 8 cmp byte ptr [ebp+
我得到了以下卡诺图,但我仍然无法从每个表中计算 XOR 的表达式。 Table 1 -------
我是一名优秀的程序员,十分优秀!