北京理工大学计算机学院夏令营出结果了吗,2019北理工计算机夏令营机试

2019北理工计算机夏令营机试

今年北理工计算机夏令营一共两道机试题,上机环境为dev c++,支持STL和C++11。测试为黑盒测试,即老师给你一张纸,每个题输入上面的样例,三个都过了就是满分。今年机试题分为两组进行,难度较往年来说有所加大,区分度高了一些,以下是第二组的题目及思路。

第一题

题目:给你一个m*n大小的矩阵,每个点有0,1,2三种取值;0代表障碍物,1代表白纸,2代表墨滴。每一秒墨滴可以向其上下左右扩散,将四周的白纸染色,被染色之后的白纸可以继续向四周扩散,以此类推。问经过几秒,矩阵中所有的白纸都被染色,如果可以,则输出扩散时间;如果不可以,则输出FALSE。

输入: m n 的大小以及矩阵每个点的值

输出:扩散时间 或 FALSE

例如:

3 3                    3 3                    2 3

0 1 0                 0 1 0                 1 0 0

1 2 1                  1 2 1                 0 0 2

0 1 0                 0 1 1                 输出:FALSE

输出:1            输出:2

个人思路:这道题感觉和leetcode上“腐烂的橘子”一题很像,首先需要找到初始状态下所有值为2的点(注意:值为2的点在一开始可能不仅仅为1个),然后再设一个队列,利用BFS求解即可。

第二题

题目:输入三个字符串,问第三个字符串能否由前两个字符串多次重复组合形成。如果能,则输出前两个字符串各自的使用次数;如果不能,则输出FALSE。

输入:三个字符串

输出:前两个字符串各自的次数 或 FALSE

例如:

aa bb bbaaaabbaa

输出:3 2

ab ba abbaaabaab

输出:FALSE

个人思路:乍一看感觉这个题挺简单,从头开始,挨个往后匹配就可以了,也就是先匹配第一个,如果可以,就去找当前位置加上第一个字符串长度的地方继续匹配,第一个不成功再去匹配第二个。但是仔细想想有这么一种情况,例如第一个字符串为aa,第二个字符串为aab,第三个字符串为aabaa,这种输入是可以匹配成功的,但用上述方法显然会输出FALSE。因此本题我才用的思路是用DFS+回溯,即在同一个位置上让两个模式串都去试着匹配一下,在匹配到尾部的时候返回即可。

总结

今年北理机试题较往年来说难度有所增加,两道题一道BFS,一道DFS,但也不是太难,基本都是板子题,多刷刷leetcode还是很有用的。

如有疑问,欢迎大家一起交流~


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部