由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 求问一道算法题 (5 mL水桶,3mL水桶求1mL水)
相关主题
问一道电面题再问一道题
请教一道题的算法!! (转载)求教一道面试题
HASHTABLE collision 后REHASH 怎么SEARCHmedian of N^2 numbers across N machines
求问一道MS面试题请教一道算法题
求问offer,business analyst方向 (转载)问道关于快速找bucket的面试题
包子求问,h1b生效后是不是opt自动失效 (转载)请教最优算法:最多装满水的桶?
求问大侠h1b transfer前后工作内容不同,但是都专业相关web count 设计
求问一个G家面试题目与图有关。一道巨常见的题
相关话题的讨论汇总
话题: 水桶话题: 容积话题: max话题: 输入话题: bucket
进入JobHunting版参与讨论
1 (共1页)
h*********r
发帖数: 76
1
标题这道题相信大家都熟的不能再熟了,现在遇到一个更加general的题目,就不知道
怎么做了。
输入为每个水桶的容积[1, 20], 水桶个数为 1-5个,相同容积的水桶可能重复
输出格式为x:y,代表最少y次操作得到x的水,x 属于[1, max(输入水桶容积)]
例子:
输入: 5 3
代表第一个水桶5L,第二个水桶3L
(输入的水桶个数最多有5个,每个水桶的容积是 1 - 20 L,并且为整数,水桶之间的
的容积可能相同)
那么输出
1: 4 最少4次操作得到1L水
2: 2
3: 1
4: 6
5: 1
如果无法得到x L的水,输出x: impossible
每次盛水必须装满该桶,从桶1导入桶2的时候,必须要么桶1倒光,要么桶2接满水
我这题只会做两个水桶的,就是不断把一个水桶装满然后倒入第二个水桶,看看当中出
现过那些容积的水
但是多个水桶的不太会做
各位有什么思路么
h**********c
发帖数: 4120
2
两桶水曾经在电影die hard series 中一集出现
以后就很少见红博flex their brain
s***5
发帖数: 2136
3
interesting. why the answer is 4? 2*3-5 = 1, isn't it 2?

【在 h*********r 的大作中提到】
: 标题这道题相信大家都熟的不能再熟了,现在遇到一个更加general的题目,就不知道
: 怎么做了。
: 输入为每个水桶的容积[1, 20], 水桶个数为 1-5个,相同容积的水桶可能重复
: 输出格式为x:y,代表最少y次操作得到x的水,x 属于[1, max(输入水桶容积)]
: 例子:
: 输入: 5 3
: 代表第一个水桶5L,第二个水桶3L
: (输入的水桶个数最多有5个,每个水桶的容积是 1 - 20 L,并且为整数,水桶之间的
: 的容积可能相同)
: 那么输出

l****h
发帖数: 1189
4
为什么1:4?
如果有1升的水桶呢? 你的条件不是 1-20吗?
是不是这样的意思:5个水桶是随机给的,任意给定的每组水桶都要能产生出1升的测
量?然后其中操作最多的一个是4次?
修改:看来理解还是不对,给了5个20升水桶,怎么也不能产生1.
再修改:你要在1-20的水桶中找5个水桶(不能用和目标一样大的水桶),最快几次倒
腾就能得到目标。还是不对, 我找一个3,一个2,一次操作不就完事了?1:1; 2:1
; 3:1.。。。
是我糊涂,没看到有给定的输入。
我的笨办法,是建立 table,
操作次数
T1: b1, b2, b3 b4, b5
T2: 所有bi+-T1
T3: 所有 bi+-T2
T4: ....
..

【在 h*********r 的大作中提到】
: 标题这道题相信大家都熟的不能再熟了,现在遇到一个更加general的题目,就不知道
: 怎么做了。
: 输入为每个水桶的容积[1, 20], 水桶个数为 1-5个,相同容积的水桶可能重复
: 输出格式为x:y,代表最少y次操作得到x的水,x 属于[1, max(输入水桶容积)]
: 例子:
: 输入: 5 3
: 代表第一个水桶5L,第二个水桶3L
: (输入的水桶个数最多有5个,每个水桶的容积是 1 - 20 L,并且为整数,水桶之间的
: 的容积可能相同)
: 那么输出

h*********r
发帖数: 76
5
这个例子的输入是 5 3
代表第一个水桶5L,第二个水桶3L
输入的水桶个数最多有5个,每个水桶的容积是 1 - 20 L,并且为整数,水桶之间的的
容积可能相同

:1

【在 l****h 的大作中提到】
: 为什么1:4?
: 如果有1升的水桶呢? 你的条件不是 1-20吗?
: 是不是这样的意思:5个水桶是随机给的,任意给定的每组水桶都要能产生出1升的测
: 量?然后其中操作最多的一个是4次?
: 修改:看来理解还是不对,给了5个20升水桶,怎么也不能产生1.
: 再修改:你要在1-20的水桶中找5个水桶(不能用和目标一样大的水桶),最快几次倒
: 腾就能得到目标。还是不对, 我找一个3,一个2,一次操作不就完事了?1:1; 2:1
: ; 3:1.。。。
: 是我糊涂,没看到有给定的输入。
: 我的笨办法,是建立 table,

h*********r
发帖数: 76
6
首先装满小桶,这时候两个桶水量为3,0
然后小桶倒入大桶,水量分别为0,3
装满小桶,3,3
小桶导入大桶,1,5
这时候小桶剩余1L
4次操作

【在 s***5 的大作中提到】
: interesting. why the answer is 4? 2*3-5 = 1, isn't it 2?
d**********6
发帖数: 4434
7
就是一个search的问题,bfs比较合适
B*********t
发帖数: 105
8
我还以为是脑筋急转弯。假设桶是圆柱体形状的话,把桶倾斜到刚好看到底面的时候,
剩余的水量刚好是1/2.
所以如果是3和5升的两个桶,那么用2.5-1.5就可以得到1升的水了。。
没看到必须倒满这个条件。感觉是很傻的一个题目。。
o***e
发帖数: 28
9
说白了就是求一个整系数不定方程的整数解 .. a_0 x_0 + a_1 x_1 + .. + a_{n-1} x
_{n-1} = b, a_i 为桶的容积, b 为最终目标的水量
如果 b 是所有 a_i 的最大公约数及其倍数, 则 (可能) 有解; 否则无解
f*********s
发帖数: 1881
10
基本同意这个,但是有两点细节需要优化,具体到下面两个例子,
例子1: 【5,3】
1:4
例子2: 【7,3】
1:4
例子1说明每次做加法count加 2,减法加1.例子2说明有时候减法也有加2。
我觉得可能需要分情况建立一个library,index是count,然后在library里search

:1

【在 l****h 的大作中提到】
: 为什么1:4?
: 如果有1升的水桶呢? 你的条件不是 1-20吗?
: 是不是这样的意思:5个水桶是随机给的,任意给定的每组水桶都要能产生出1升的测
: 量?然后其中操作最多的一个是4次?
: 修改:看来理解还是不对,给了5个20升水桶,怎么也不能产生1.
: 再修改:你要在1-20的水桶中找5个水桶(不能用和目标一样大的水桶),最快几次倒
: 腾就能得到目标。还是不对, 我找一个3,一个2,一次操作不就完事了?1:1; 2:1
: ; 3:1.。。。
: 是我糊涂,没看到有给定的输入。
: 我的笨办法,是建立 table,

相关主题
包子求问,h1b生效后是不是opt自动失效 (转载)再问一道题
求问大侠h1b transfer前后工作内容不同,但是都专业相关求教一道面试题
求问一个G家面试题目与图有关。median of N^2 numbers across N machines
进入JobHunting版参与讨论
v*****1
发帖数: 2200
11
桶太小

【在 h*********r 的大作中提到】
: 标题这道题相信大家都熟的不能再熟了,现在遇到一个更加general的题目,就不知道
: 怎么做了。
: 输入为每个水桶的容积[1, 20], 水桶个数为 1-5个,相同容积的水桶可能重复
: 输出格式为x:y,代表最少y次操作得到x的水,x 属于[1, max(输入水桶容积)]
: 例子:
: 输入: 5 3
: 代表第一个水桶5L,第二个水桶3L
: (输入的水桶个数最多有5个,每个水桶的容积是 1 - 20 L,并且为整数,水桶之间的
: 的容积可能相同)
: 那么输出

B*******g
发帖数: 1593
12
这很像硬币凑数的题目啊,不过有减法,次数统计也不像数硬币那么直接,应该可以dp?

【在 h*********r 的大作中提到】
: 标题这道题相信大家都熟的不能再熟了,现在遇到一个更加general的题目,就不知道
: 怎么做了。
: 输入为每个水桶的容积[1, 20], 水桶个数为 1-5个,相同容积的水桶可能重复
: 输出格式为x:y,代表最少y次操作得到x的水,x 属于[1, max(输入水桶容积)]
: 例子:
: 输入: 5 3
: 代表第一个水桶5L,第二个水桶3L
: (输入的水桶个数最多有5个,每个水桶的容积是 1 - 20 L,并且为整数,水桶之间的
: 的容积可能相同)
: 那么输出

c**********8
发帖数: 1052
13

像DP
一个hashtable(L数,操作次数)
初始化,已有桶的L数,对应次数是1,其他是impossible
然后对已有的L数做相减操作,对应次数相加

【在 h*********r 的大作中提到】
: 标题这道题相信大家都熟的不能再熟了,现在遇到一个更加general的题目,就不知道
: 怎么做了。
: 输入为每个水桶的容积[1, 20], 水桶个数为 1-5个,相同容积的水桶可能重复
: 输出格式为x:y,代表最少y次操作得到x的水,x 属于[1, max(输入水桶容积)]
: 例子:
: 输入: 5 3
: 代表第一个水桶5L,第二个水桶3L
: (输入的水桶个数最多有5个,每个水桶的容积是 1 - 20 L,并且为整数,水桶之间的
: 的容积可能相同)
: 那么输出

a***u
发帖数: 318
14
小桶装满 3L 倒入 大桶 (3L/5L)
再次装满小桶,倒满大桶 (2L+3L/5L),
最后剩下 1L 在小桶内
h*********r
发帖数: 76
15
题目不是就求这一个诶。。

【在 a***u 的大作中提到】
: 小桶装满 3L 倒入 大桶 (3L/5L)
: 再次装满小桶,倒满大桶 (2L+3L/5L),
: 最后剩下 1L 在小桶内

h*********r
发帖数: 76
16
up up up
i********y
发帖数: 34
17
1. check if x is possible (as someone mentioned, x is only possible if it's
a multiple of greatest common divisor K of all buckets)
2. get max steps for each x (1 if x = bucket_i. For others, use max(bucket_i
) and bucket_j where their GCD is K. Repeatedly pour one to the other until
all x are found)
3. get min steps for each x. Use recursive method and try all possibilities,
dynamically update max steps for other x along the way. Number of recursive
depth can't exceed the max step for x.

【在 h*********r 的大作中提到】
: 标题这道题相信大家都熟的不能再熟了,现在遇到一个更加general的题目,就不知道
: 怎么做了。
: 输入为每个水桶的容积[1, 20], 水桶个数为 1-5个,相同容积的水桶可能重复
: 输出格式为x:y,代表最少y次操作得到x的水,x 属于[1, max(输入水桶容积)]
: 例子:
: 输入: 5 3
: 代表第一个水桶5L,第二个水桶3L
: (输入的水桶个数最多有5个,每个水桶的容积是 1 - 20 L,并且为整数,水桶之间的
: 的容积可能相同)
: 那么输出

1 (共1页)
进入JobHunting版参与讨论
相关主题
一道巨常见的题求问offer,business analyst方向 (转载)
问道大数据的题包子求问,h1b生效后是不是opt自动失效 (转载)
Groupon电面求问大侠h1b transfer前后工作内容不同,但是都专业相关
简单map reduce mean median, 傻逼回答求问一个G家面试题目与图有关。
问一道电面题再问一道题
请教一道题的算法!! (转载)求教一道面试题
HASHTABLE collision 后REHASH 怎么SEARCHmedian of N^2 numbers across N machines
求问一道MS面试题请教一道算法题
相关话题的讨论汇总
话题: 水桶话题: 容积话题: max话题: 输入话题: bucket