好久没有做题了,水平真的会退步。上机考个试做题都累,考试感悟如下:
第一题:水题,给16组目标(R,G,B),再输入多组(R’,G' , B'),距离定义为欧式距离,求输入每组
(R’,G' , B')与前面16个距离最小的并输出。
第二题:水题:题目描转。两人报数,数可能是虚报的,报数小的一定会检查报数大的,检查规则为数是否可有1-100内的数字相乘获得,1个数字只能用一次,(49不能为7x7),若两个人的数都不能满足检查要求,输出大的数,若两个人的数都满足要求,且如49和343,只能由一种方案相乘获得且数字冲突,则输出小的数。
理解:
较大的max,小的min。判断max和min是否均可以有1-100内的两个数相乘获得(一个数只能用一次)。按要求输出max或者min,要求按题意整理为下表:
是否存在方案构成max
|
是否存在方案构成min
|
输出
|
是,且大于1个方案
|
是,方案数不限
|
max
|
是,只有一种方案,且一个因子与构成min的方案相同
|
是,只有一种方案
|
min
|
是,只有一种方案,无因子与构成min的方案相同
|
是,只有一种方案
|
max
|
是,方案数大于等于1
|
是,方案数大于1个
|
max
|
否
|
否
|
max
|
是
|
否
|
max
|
否
|
是
|
min
|
例如49=1×49 (7×7不算)
343=7x49
输出49
结合上表只有2种情况是输出小的数
(1)两个数都只存在一种方案相乘获得,且有个数是公共因子,
(2)大的数无法由1-100相乘构成,小的可以。
题目转化为求min和max的1-100内的因子,然根据(1)(2)判断即可,如果数据大直接求质因子再优化下,数据比较小直接算1-100内满足条件的乘数因子即可。
第三题:给出AB两个杯子最大容量a和b以及目标n, n小于b,目标是在b中出现n升水,输出打印路径,(a,b,n范围为1-100)
存在以下6个操作
+A。倒满A
+B,倒满B
A>B,A倒到B,若B会溢出则剩余留在A否则全部倒给B
B>A,B倒到A,若A会溢出则剩余留在B否则全部倒给A
-A, 清空A
-B;清空B
样例3 5 4
输出操作路径
考试时脑子短路使用了DFS每个节点对6个操作搜索,然后发现会出现循环倒水问题,所以限制了深度,只限制了20,样例能过,测试发现对于1 1000 999 这种A往B一杯杯倒水,就会超过深度限制。
搜了下查看原题为POJ3414和POJ1606
https://blog.youkuaiyun.com/tigerisland45/article/details/52208174.因该使用BFS,这样还能输出最短路,对于dfs考试时有想到迭代加深搜索,但是题目没写求最小的倒水路径,考虑这种公司题目不会出太难,直接限制深度20,在指定深度里面找最短的倒水解。现在想一下20设置有点小,不知道能不能过。想当年这种题目也是刷过的水题,现在脑回路只剩下dfs+剪枝优化了,都忘了用BFS了。
现在三个小时做三道题,感觉时间特别紧张,水平一直在走下坡路。考试前还是要刷题练一下,有些东西用过丢了就再也找不回来了。ACM从入门到忘记(~-~),刷题博客荒废了多年,真是感慨万千,今天考试的coding能力都是大学时候打下的基础都过了4,5年了。确实丢的差不多了。该补补了。