Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 修改二进制序列_Algorithm_Combinatorics - Fatal编程技术网

Algorithm 修改二进制序列

Algorithm 修改二进制序列,algorithm,combinatorics,Algorithm,Combinatorics,我正在解决一个问题,结果被卡住了。它表示-我们有一个0和1的二进制序列。我们可以对序列执行此操作任意次数:对于任何位d(0),如果存在1(如果最初存在1),并且在修改前两位中的至少一位(即位d)后不执行此操作−1和d−2,并且在以下两位中的至少一位,即位d+1和d+2,我们可以将其更改为1。 但是,不可能修改前两位和后两位 序列权重是序列中1的总数除以序列长度。我们需要使这个权重至少为0.75,目标是找到需要修改的最小位数,以便使序列的权重至少为0.75 如果我们不能使重量至少为0.75打印-1

我正在解决一个问题,结果被卡住了。它表示-我们有一个0和1的二进制序列。我们可以对序列执行此操作任意次数:对于任何位d(0),如果存在1(如果最初存在1),并且在修改前两位中的至少一位(即位d)后不执行此操作−1和d−2,并且在以下两位中的至少一位,即位d+1和d+2,我们可以将其更改为1。 但是,不可能修改前两位和后两位

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

例如。 给定序列:100110111 答案=1 说明:我们可以将第3位从0更改为1,因此序列变为101110111,其权重大于0.75

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

这确实是两个问题

要达到重量条件,必须将多少个0变为1? 可能吗? 您可以通过扫描字符串并生成三个计数来解决这两个问题。有多少个0将最终成为0?有多少个1?y有多少个0可以变成1?z

如果y+z<3*x,则答案为-1


否则答案是max0,ceilx+y+z*0.75-y。

谢谢你的回答。我想知道你能否给出一个简短的证明,说明你是如何得出这些条件的。当答案为-1@b时,我不知道如何推导条件