在配对的过程中,徐佑也考虑到了,2和5出现的数量问题。
无疑,2的个数一定是多于5的个数的。
这样一来,问题就变成了,统计阶乘数里有多少个5这个因子。
“等一下……像25、125这样的数字,里面其实是包含不止一个5的因子的。”
徐佑很快注意到了这一重要的问题。
如果忽略这个情况,那最后的结果就会出现错误。
最终,徐佑在电脑上,编辑出了短短的五行代码,并给彭俊发送了过去。
“不错啊!”
在看到徐佑发来的代码后,彭俊也不禁对徐佑的解答表示着肯定。
虽然这道题不算什么难题。
但能在几分钟的时间内,给出如此漂亮的答案。
彭俊知道,大部分计算机专业的本科生,也是未必能做到的。
“这孩子,应该是自己做出来的吧。”
彭俊相信,既然徐佑向自己寻求题目,按理说肯定不会去搜索答案的。
但为了进一步确定徐佑的能力,彭俊决定,再给徐佑出一个难题,还是那种网上根本搜不到的题目。
“不错,做得很好,代码也很简洁。再给你发一道难度更大的题目吧。”
这一次,彭俊将一道自己改编过的题目,向徐佑发送了过去。
看着这道新的题目,徐佑很快陷入到思考之中。
“给出k个有序的数组:L1,L2,……,Lk,每一个长度为n,可以对该数组进行线性时间的预处理。然后回答如下询问:给出x,回答每个数组中第一个小于x的元素是什么?”
这一次,徐佑也确实感到了,题目难度的提升。
要是徐佑这些天没有学完这些门课程的话,估计是连题目都看不懂的。
徐佑首先想到的方法,是对于每个数组二分查找。
但这样的话,复杂度会非常高,达到了O(klogn)。
很快,徐佑便找到了另外的一个思路。
“如果用Fractional-Cascading的话,就可以将复杂度降低到O(k+logn)了。”
所谓的Fractional-Cascading,也就是分散层叠算法,可以对经典分块问题进行大大的优化。
按照这个思路,徐佑重新进行算法的构思,并很快整理出了一套全新的方案。
“这样一来,只要第一次使用二分,之后每次都是常数查找就可以了。”
完成了算法数据结构的编辑后,徐佑将自己的解法发送给了彭俊。
看见徐佑的答案,彭俊又是不禁连连点头。
“这小子,还真不是在跟我开玩笑。能做到这个水平,绝对是把这些课程都学透了的。”
这个时候,彭俊也不得不对徐佑的学习能力盛赞了起来。
彭俊并不知道,徐佑到底是如何在这短短的十天时间里,把几乎整个计算机本科阶段的知识都学习完毕,同时很好的掌握了这些知识。
就算是每天花出十几个小时的时间,甚至都不够把这些课程全部都看一遍的。
但徐佑既然能够做到,说明他肯定有自己独特的学习方法。
“不错,这个问题的回答也很好,不仅能够解决问题,而且算法的优化程度也很不错。徐佑,你是我见过学的最快的一个学生了。”
虽然这只是彭俊随便出的一道题,还不能完全考察徐佑的计算机知识能力。