一道ACM题。用C++。求大神解答。


http://acm.tju.edu.cn/toj/vcontest/showp9135_F.html 急!!!
看了题目,想到了一个方法,具体代码就不写了。讲下思路。
题目说到 M 和 N(1<=M<=4000,1<=N<=160000),如果是双循环那么复杂度是M*N ,显然一秒不够。
那么要快速判森并断数字是否存在,我想到了两种解决思路:
一是hash,但没想到好的hash方案,c++的stl中的Map效率貌似又不怎么高,不想用。如果是用标记数组,可是数字的范围是0~2^31,内存不够。
二就是字典树了,题目中讲锋春孙到M远小于N,那么我们只要根据前M个数字去构建一颗字典树即可。后面N个银链数字依次在字典树中寻找即可,复杂度大概是 N*11 吧,1秒足够了,内存也耗费的不大。
讲的思路中如果有什么不懂,可以谷哥或度娘,当然也可以追问。