BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / acm-icpc / #97957同步于 2019/4/17
该镜像源已超过 30 天没有更新,可能在源站已被删除。
ACM_ICPC机器人发帖

求教大牛一个工程实际问题

weiming383
2019/4/17镜像同步11 回复
工作遇到一个问题,百思不得其解,还请大牛们点拨。跪谢先! 几个长度一样的比特数组,比如1001,1100,1010。1表示位置占用,0表示没有占用。 问题是比特数组允许循环移位,比如1001移位后和1100一样,可以做到占用位置相同,共计占用两个位置。第三个数组1010无论怎么移位,只有一个位置和前两个数组相同,所以得新增第三个占用位置。因此三个数组得占用三个位置。 如果多个比特数组,如何才能找到最小数目的占用位置,并且找到对应的各个数组的循环移位?
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
Wizmann机器人#1 · 2019/4/17
首先,你的比特数组有多长。 如果短的话,就穷举。对于每一个比特数组,取最小(或最大)的那个。例如[110, 011],我们都可以用011来表示。 如果长的话,算一个最小表示法,O(n)的。 这样我们就把去重的问题解决了。
Wizmann机器人#2 · 2019/4/17
找最小数目用DP吧。如果数据大的话复杂度就比较高了。 暂时没想到啥更好的方法。
weiming383机器人#3 · 2019/4/17
数组比较长 看了下最小表示法,似乎不行 比如0001101,0000011,已经是最小表示了,但实际占用数目应该是3 也许想得不对,求指正 【 在 Wizmann 的大作中提到: 】 : 首先,你的比特数组有多长。 : 如果短的话,就穷举。对于每一个比特数组,取最小(或最大)的那个。例如[110, 011],我们都可以用011来表示。 : 如果长的话,算一个最小表示法,O(n)的。 : ...................
Rclover机器人#4 · 2019/4/18
没看懂问题描述。。[ema1]
weiming383机器人#5 · 2019/4/18
汗[em17],就是01比特数组,允许循环移位,求相同位置是0的最大个数 000100 和100000经过循环移位后相同位置0的最大个数是5 如果多个数组,如何快速确定相同位置是0的最大个数
a940100079机器人#6 · 2019/4/18
感觉这个问题应该是贪心的解法 [1001,1100,1010,......] 原始为0000 1001进来后,需要修改为1001 1100进来后,判断和1001最多循环移位,最多重叠为2,即1100可以通过移动产生1001,当前依旧为1001 1010,发现不论何种方法,都需要增加1位。即修改为1011 所以问题就是解决2个bit数循环移位最大重叠数,解决两两的问题就可以了 bit长度如果为64的话 (任意2个bit数最大重叠数的求解经过64循环移位一定可以求解出最优解) 那么解决整个问题的时间复杂度为64*n
Wizmann机器人#7 · 2019/4/18
分两步,第一步是去重,用最小表示法。 第二步用DP搞。 话说比较长是多长啊?100?200? 不要让大家猜嘛。。。 【 在 weiming383 的大作中提到: 】 : 数组比较长 : 看了下最小表示法,似乎不行 : 比如0001101,0000011,已经是最小表示了,但实际占用数目应该是3 : ...................
weiming383机器人#8 · 2019/4/18
多谢解答,第三个数进来以后可能变成1011也可以变成1101,你这个例子可能有点特殊,数组长度如果更长的话,新增1的位置好像对后面新的数组有影响
stdiohero机器人#9 · 2019/4/18
bd,学习大佬回答