【问题标题】:Modifying binary sequence修改二进制序列
【发布时间】:2019-06-08 14:26:25
【问题描述】:

我正在解决一个问题并陷入困境。它指出 - 我们有一个 0 和 1 的二进制序列。我们可以对序列执行此操作任意次数:对于任何为 0 的位 d,如果存在 1(如果最初有 1,而不是之后修改)在前两位中的至少一位上,即位 d-1 和 d-2,以及在后两位中的至少一位上,即位 d+1 和 d+2,我们可以将其更改为 1 . 但是不能修改前两位和后两位。

序列的权重是序列中1的总数除以序列的长度。我们需要使这个权重至少为 0.75,目标是找到需要修改的最小位数以使序列的权重至少为 0.75 如果我们不能使权重至少为 0.75 print -1

例如
给定序列:100110111
答案 = 1
解释:我们可以把bit 3从0改为1,所以序列变成101110111,其权重大于0.75

我的方法:
我首先找到了序列的初始权重,如果它小于 0.75,则从位位置 2 到长度 2 遍历序列,并且对于具有 0 的每个位检查条件 [ {(d-1)=1 OR (d-2)=1} AND {(d+1)=1 OR (d+2)=1} ] 并在每一步重新计算权重,如果权重超过 0.75,则打印答案。 但是这种方法给出了错误的答案。

【问题讨论】:

    标签: algorithm combinatorics


    【解决方案1】:

    这确实是两个问题。

    1. 必须有多少个 0 变为 1 才能达到权重条件?
    2. 这可能吗?

    您可以通过扫描字符串并产生三个计数来解决这两个问题。有多少个 0 会变成 0? (x) 有多少个 1? (y) 有多少个 0 可以变成 1? (z)

    如果y+z < 3*x,那么答案是-1。

    否则答案是max(0, ceil((x+y+z)*0.75) - y)

    【讨论】:

    • 感谢您的回答。我想知道您是否可以就您如何得出这些条件提供一个简短的证明。当答案为 -1 @btilly 时,我不知道如何推导出条件
    猜你喜欢
    • 2010-10-01
    • 1970-01-01
    • 2016-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-13
    • 2023-01-14
    • 2017-04-07
    相关资源
    最近更新 更多